2016-09-13 6 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, который является вашим принятым расхождением

 Смежные вопросы

  • Нет связанных вопросов^_^