Beispiel #1
0
        public static void Push(Date arg1, TimeInterval arg2, bool isPlus)
        {
            int year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0;

            if (isPlus)
            {
                second = PlusST(arg1.Second, arg2.Second, 60, second, ref month);
                minute = PlusST(arg1.Minute, arg2.Minutes, 60, minute, ref hour);
                hour   = PlusST(arg1.Hour, arg2.Hours, 24, hour, ref day);

                day   = PlusSD(arg1.Day, arg2.Days, 30, day, ref month);
                month = PlusSD(arg1.Month, arg2.Month, 12, month, ref year);
                year += arg1.Year + arg2.Years;
            }
            else
            {
                // так как Date не может быть ранее 1583, а лет не может быть больше 19
                // в интервале, то в отрицательные числа уйти никак
                second = MinusST(arg1.Second, arg2.Second, 60, second, ref month);
                minute = MinusST(arg1.Minute, arg2.Minutes, 60, minute, ref hour);
                hour   = MinusST(arg1.Hour, arg2.Hours, 24, hour, ref day);

                day   = MinusSD(arg1.Day, arg2.Days, 30, day, ref month);
                month = MinusSD(arg1.Month, arg2.Month, 12, month, ref year);
                year += arg1.Year - arg2.Years;
            }

            FormAns.Push(new Date(day, month, year, hour, minute, second));
        }
Beispiel #2
0
        public static void Push(Date arg1, Date arg2)
        {
            // нахождение разницы между датами
            ulong yearDiff   = (ulong)(arg1.Year - arg2.Year);
            ulong monthDiff  = (ulong)(arg1.Month - arg2.Month);
            ulong dayDiff    = (ulong)(arg1.Day - arg2.Day);
            ulong hourDiff   = (ulong)(arg1.Hour - arg2.Hour);
            ulong minuteDiff = (ulong)(arg1.Minute - arg2.Minute);
            ulong secondDiff = (ulong)(arg1.Second - arg2.Second);

            if (arg1.CompareTo(arg2) == -1)
            {
                FormAns.Push("Попытка вычитания большей даты из меньшей");
                return;
            }

            if (yearDiff * 12 + monthDiff + 10 > TimeInterval.MaxMonths)
            {
                FormAns.Push("Слишком большой интервал: некорректные вычисления");
                return;
            }

            // посчитать, сколько секунд прошло между событиями
            ulong seconds = secondDiff + minuteDiff * 60 + hourDiff * 60 * 60 +
                            dayDiff * 60 * 60 * 24 + monthDiff * 60 * 60 * 24 * 30 +
                            yearDiff * 60 * 60 * 24 * 30 * 12;

            // выслать интервал
            FormAns.Push(new TimeInterval(seconds, 1));
        }
Beispiel #3
0
        private void button1_Click(object sender, EventArgs e)
        {
            FormAns f2 = new FormAns(IsAmerican);

            f2.Owner = this;
            f2.ShowDialog();
        }
Beispiel #4
0
        // Работа с протоколом
        static List <Protocol> PushProto(string path)
        {
            List <Protocol> ans;

            try
            {
                ans = Protocol.Start(path);
            }
            catch (Exception e)
            {
                FormAns.Push(e.Message);
                throw;
            }

            return(ans);
        }