Если я посмотрю на источник среды выполнения 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)
Если проблема, которую Вы имеете, из-за них, тип БД, Вы могли бы преобразовать в тот тип и выдержать сравнение там, мы теряем/получаем о преобразовании миллисекунды в 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) и сравниваем.
Последняя строка является столь чистой, как я могу думать, чтобы сделать равенство в промежутке определенного времени.
Как насчет того, чтобы найти различие между этими двумя часами и видеть, ли это ниже определенного порога (говорят 3 600 секунд в течение часа)?
var diff = expireTimeStamp.Subtract(expectedExpireTime).TotalSeconds;
pass = Math.Abs(diff) < 3600;
Вычтите их. Проверьте ли получающееся TimeSpan
в определенном максимальном диапазоне.
Создайте новые объекты DateTime и сравните их. В C# существует очень мало штрафа за построение "одноразовых" объектов таким образом.