2016-09-13 13 views
1

я был сравнение равенства 2 раз тот, который берется из loacal машины и один из серверапроверка равенства для time_t набрана переменные

time_t local= kernel()->time_now() 

это time_now() действительно возвращает time_t и использует нормальный способ получить SYS время

time_t remote =fs->ctime() 

получая время создания directory..then когда я local==remote это не удается, так как я получил некоторое различие минут между клиентом и сервером, то я синхронизировал их даже близко к seconds.After, что она проходит, но когда-то он терпит неудачу, действительно непредсказуемый мой Вопрос будет ли нормально использовать == над time_t или я должен использовать некоторые функции зОго я видел difftime() это будет хорошо для проверки равенства, потому что мне нужно bool в результате

+1

time_t - это всего лишь число. поэтому в целом это нормально, чтобы сравнить их с '==' Vou просто нужно учитывать, что и сервер/клиент должен быть синхронизирован по времени. Часовые пояса также могут повредить вещи. – Hayt

ответ

-1

Эй time_t это long int в 64-битные машины еще предстоит long long int (меняется в системе .. может быть, и долго), так что да, вы можете сравнить. Но лучше всего использовать difftime() для получения точных результатов.

Теперь, как difftime() знает, что это time_t средство (если оно основано на какой-то год месяц день или если биты time_t представляют собой нечто внутренне ложь, и т.д., то difftime() проходит которого на - не может.) [если time_t основанные на система не определяет его как разность времени с определенной точки, то мы не можем использовать time_t в вычитании, а это, очевидно, целесообразно использовать difftime(), чтобы получить предсказуемые результаты на таких случаях]

Также difftime() гарантированно работает ному вычесть может привести к неправильному результату. Также результат, возвращаемый difftime(), равен double, в отличие от -, который дает long int, что может дать очень большое значение, которое невозможно сохранить в time_t.

+0

«может дать вам год месяц и т. Д.». Нет, не может. 'difftime()' возвращает 'double', а не' time_t'. 'time_t' может предоставить вам эту информацию, но' difftime() 'возвращает разницу в секундах, и это – sokkyoku

+0

@sokkyoku>; Я не хочу сказать, что ... если какой-то формат внутри, то diffftimes пропускает subarctin. – coderredoc

+0

@sokkyoku>: пожалуйста, проверьте мой ответ. Если вы чувствуете, что что-то не так или не ясно, пожалуйста, дайте мне знать. Спасибо, что указали на неясные заявления. – coderredoc

1

Вы должны сравнить разницу между этими временами (рассчитанными с difftime()) до допустимого предела погрешности, если они могут незначительно отличаться.

Вы получаете логическое значение, как это:

(fabs(difftime(remote, local)) < epsilon) 

fabs, чтобы получить абсолютное значение двойного возвращаемый difftime (что означает, что если это отрицательное значение, то оно будет положительным), которые вы затем сравнить до epsilon, который является вашим принятым расхождением