Что лучший способ состоит в том, чтобы сравнить равенство двух DateTime в C# …, но только к определенной точности?

Если я посмотрю на источник среды выполнения Python 3, то увижу CommonToken так :

class CommonToken(Token):

    # An empty {@link Pair} which is used as the default value of
    # {@link #source} for tokens that do not have a source.
    EMPTY_SOURCE = (None, None)

    def __init__(self, source = EMPTY_SOURCE, type = None, channel=Token.DEFAULT_CHANNEL, start=-1, stop=-1):
        super(CommonToken, self).__init__()
        self.source = source
        self.type = type
        self.channel = channel
        self.start = start
        self.stop = stop
        self.tokenIndex = -1
        if source[0] is not None:
            self.line = source[0].line
            self.column = source[0].column
        else:
            self.column = -1

    ...

и Token так:

class Token (object):

    ...

    def __init__(self):
        self.source = None
        self.type = None # token type of the token
        self.channel = None # The parser ignores everything not on DEFAULT_CHANNEL
        self.start = None # optional; return -1 if not implemented.
        self.stop = None  # optional; return -1 if not implemented.
        self.tokenIndex = None # from 0..n-1 of the token object in the input stream
        self.line = None # line=1..n of the 1st character
        self.column = None # beginning of the line at which it occurs, 0..n-1
        self._text = None # text of the token.

    ...

]

Итак, я думаю, это должно сделать это для вас:

return (token.line, token.column)

6
задан danieltalsky 4 March 2009 в 23:55
поделиться

4 ответа

Если проблема, которую Вы имеете, из-за них, тип БД, Вы могли бы преобразовать в тот тип и выдержать сравнение там, мы теряем/получаем о преобразовании миллисекунды в SQLDateTimes на примерно 1/3 DB, сохраняет.

В противном случае сравните единицу, о которой Вы на самом деле заботитесь:

DateTime dt1 = DateTime.UtcNow;
DateTime dt2 = DateTime.UtcNow.AddMinutes(59); // or 1 or 61 for test values;

// if the dates are in the same hour (12:10 == 12:50, 1:58 != 2:02)
if(dt1.Hour == dt2.Hour) // result

или если Вы заботитесь, что они в отрезке времени часа

// if the dates are within one hour of each other (1:58 == 2:02, 3:30 != 4:45)
if((dt1 - dt2).Duration() < TimeSpan.FromHours(1)) // result

Сюда вычитание дат генерирует отрезок времени, продолжительность является 'абсолютным значением', и затем мы создаем предел явно из единицы, о которой мы заботимся о (FromHours) и сравниваем.

Последняя строка является столь чистой, как я могу думать, чтобы сделать равенство в промежутке определенного времени.

11
ответ дан 8 December 2019 в 05:24
поделиться

Как насчет того, чтобы найти различие между этими двумя часами и видеть, ли это ниже определенного порога (говорят 3 600 секунд в течение часа)?

var diff = expireTimeStamp.Subtract(expectedExpireTime).TotalSeconds;
pass = Math.Abs(diff) < 3600;
6
ответ дан 8 December 2019 в 05:24
поделиться

Вычтите их. Проверьте ли получающееся TimeSpan в определенном максимальном диапазоне.

4
ответ дан 8 December 2019 в 05:24
поделиться

Создайте новые объекты DateTime и сравните их. В C# существует очень мало штрафа за построение "одноразовых" объектов таким образом.

1
ответ дан 8 December 2019 в 05:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: