Нет, это не нормально для такого рода изменений. Вы должны получать только другое значение, если:
t_TriggerTime
изменения; или
- , если ваш часовой пояс изменяется (и часовые пояса редко меняются на секунду, они, как правило, предпочитают почасовые или полчасовые прыжки); или
- есть серьезная ошибка в вашей функции
localtime()
; или
- вы используете несколько потоков, и общее состояние изменяется.
Этот последний пункт несет в себе. Если какой-либо другой поток выполнения также вызывает функции времени, localtime()
часто возвращает адрес внутреннего объекта, который может быть изменен без вашего ведома.
Если выясняется, что это проблема, многопоточные системы могут предоставлять поточно-безопасный вариант, который использует объект, который предоставляет, а не общий внутренний. Например,
struct tm tms;
struct tm *ptms = localtime_r (&t_TriggerTime, &tms);
// ptms is now &tms, so use ptms->X (or tms.X).
Однако я бы изучение кода печати очень тщательно, стандарт struct tm
не имеет ни малейшего понятия о суб-второй резолюции, так что я понятия не имею, где ваш .123
откуда.
Укажите, пожалуйста, код, который напечатал время. – chux
Стандартные версии 'localtime()' не имеют понятия о долях секунды. Нет, это не так, чтобы увидеть то же значение, что и два разных значения. Однако нам нужно будет увидеть больше кода, чтобы угадать, что происходит. –