/// <summary> /// Эта функция определяет, являеться ли времена a и b одними и теми же событиями с учетом погрешности измерения prem в наносекундах /// </summary> /// <param name="a">Что сравниваем</param> /// <param name="b">С чем сраваем</param> /// <param name="prem">Погрешность измерения (в наносекундах)</param> /// <returns>True, если |a-b|<=c. False, если нет.</returns> public static bool is_A_EventSimulB(DateNanos a, DateNanos b, int prem) { DateNanos c = new DateNanos(0, 0, 0, 0, 0, 0, (short)prem); c.makeCorrect(); a.makeCorrect(); b.makeCorrect(); short comp = a.compare(b); if (comp == 0) { return(true); } else if (comp == -1) { if ((b - a) <= c) { return(true); } } else if (comp == 1) { if ((a - b) <= c) { return(true); } } return(false); }
/// <summary> /// Этот метод вычитает из текущего времени заданное количество миллисекунд и приводит данное время к правельному виду. /// ВАЖНО!!! ОТРИЦАТЕЛЬНОЕ ВРЕМЯ НЕПРЕДСКАЗУЕМО СЕБЯ ВЕДЕТ. НЕ СОВЕТУЮ ВЫЧИТАТЬ ИЗ МЕНЬШЕГО ВРЕМЕНИ БОЛЬШЕЕ /// </summary> /// <param name="nanos">Количество миллисекунд, на которое нужно уменьшить это время</param> public void subtract(ulong nanos) { DateNanos b = new DateNanos(); b.setNanos(nanos); subtract(b); }
/// <summary> /// Этот метод вычитает из данного экземпляра времени время аргумент и приводит результат к правельному виду. /// ВАЖНО!!! ОТРИЦАТЕЛЬНОЕ ВРЕМЯ НЕПРЕДСКАЗУЕМО СЕБЯ ВЕДЕТ. НЕ СОВЕТУЮ ВЫЧИТАТЬ ИЗ МЕНЬШЕГО ВРЕМЕНИ БОЛЬШЕЕ /// </summary> /// <param name="date">На сколько времени нужно уменьшить это время</param> void subtract(DateNanos date) { makeCorrect(); date.makeCorrect(); if (compare(date) >= 0) { this.Days -= date.Days; this.Hours -= date.Hours; this.Minutes -= date.Minutes; this.Seconds -= date.Seconds; this.Millis -= date.Millis; this.Micros -= date.Micros; this.Nanos -= date.Nanos; } else { this.Days = (short)(date.Days - this.Days); this.Hours = (short)(date.Hours - this.Hours); this.Minutes = (short)(date.Minutes - this.Minutes); this.Seconds = (short)(date.Seconds - this.Seconds); this.Millis = (short)(date.Millis - this.Millis); this.Micros = (short)(date.Micros - this.Micros); this.Nanos = (short)(date.Nanos - this.Nanos); } makeCorrect(); }
/// <summary> /// Этот метод прибовляет к текущему времени заданное количество миллисекунд и приводит данное время к правельному виду. /// </summary> /// <param name="nanos">Количество миллисекунд, на которое нужно увеличить это время</param> public void add(ulong nanos) { DateNanos b = new DateNanos(); b.setNanos(nanos); add(b); }
/// <summary> /// Этот метод прибовляет к времени данного экземпляра время-аргумент и приводит результат к правельному виду. /// </summary> /// <param name="date">Время, на которое нужно увеличить это время</param> void add(DateNanos date) { this.Days += date.Days; this.Hours += date.Hours; this.Minutes += date.Minutes; this.Seconds += date.Seconds; this.Millis += date.Millis; this.Micros += date.Micros; this.Nanos += date.Nanos; makeCorrect(); }
/// <summary> /// Возвращает разницу между временем данного экземпляра и аргумента, выраженную в наносекундах.<para> /// при слишком большом значении памяти ulong может не хватить!!!</para> /// </summary> /// <param name="a">То, что сравнивать</param> /// <param name="b">То, с чем сравнивать</param> /// <returns>Разница, в наносекундах</returns> static public ulong difference(DateNanos a, DateNanos b) { if (a.compare(b) > 0) { a.subtract(b); return(a.getNanos()); } else if (a.compare(b) < 0) { b.subtract(a); return(b.getNanos()); } else { return(0); } }
/// <summary> /// Этот метод сравнивает время данного экземпляра и параметра /// </summary> /// <param name="date"> /// Возвращает -1, если параметр больше; /// 0, если равны; /// 1, если экземпляр больше параметра;</param> /// <returns>Результат сравнения</returns> short compare(DateNanos date) { if (Days > date.Days) { return(1); } else if (Days < date.Days) { return(-1); } if (Hours > date.Hours) { return(1); } else if (Hours < date.Hours) { return(-1); } if (Minutes > date.Minutes) { return(1); } else if (Minutes < date.Minutes) { return(-1); } if (Seconds > date.Seconds) { return(1); } else if (Seconds < date.Seconds) { return(-1); } if (Millis > date.Millis) { return(1); } else if (Millis < date.Millis) { return(-1); } if (Micros > date.Micros) { return(1); } else if (Micros < date.Micros) { return(-1); } if (Nanos > date.Nanos) { return(1); } else if (Nanos < date.Nanos) { return(-1); } return(0); }