Я пытаюсь использовать стиль форматирования IDE. Так, мы избегаем новых и скучных определений о том, как записать код и следовательно, ненужные слияния из-за различий в расположении с отступом и формате.
Документация обязательна даже на большей части глупого кода. Это могло быть хорошо, имеют шаблон для генерации строк документации в коде. Соглашение о стандартизации и организации в команде является лучшим стилем.
Не уверен, что для вас может быть не так; точно такой же код работает для меня.
$ cat > test.cc #include <boost/date_time/gregorian/gregorian.hpp> #include <boost/date_time/posix_time/posix_time.hpp> using namespace boost::posix_time; int main() { ptime now = second_clock::universal_time(); std::cout << "Current Time is: "<< to_iso_extended_string(now)<< std::endl; ptime now_2 = microsec_clock::universal_time(); std::cout << "Current Time is: "<< to_iso_extended_string(now_2)<< std::endl; return 0; } ^D $ c++ -lboost_date_time test.cc $ ./a.out Current Time is: 2009-10-14T16:26:55 Current Time is: 2009-10-14T16:26:55.586295
С точки зрения реализации, second_clock
использует time
и microsec_clock
использует gettimeofday
или GetSystemTimeAsFileTime
внизу, в зависимости от платформы. Что-то не так с вашей платформой - какая у вас ОС и версия?
Какая у вас версия Boost? Если он равен 1.38 или ниже, обновите его до 1.39 или примените исправление к # 2809 вручную.
--- boost/date_time/filetime_functions.hpp (revision 53621) +++ boost/date_time/filetime_functions.hpp (revision 53622) @@ -96,9 +96,7 @@ { /* shift is difference between 1970-Jan-01 & 1601-Jan-01 * in 100-nanosecond intervals */ - const uint64_t c1 = 27111902UL; - const uint64_t c2 = 3577643008UL; // issues warning without 'UL' - const uint64_t shift = (c1 << 32) + c2; + const uint64_t shift = 116444736000000000ULL; // (27111902 << 32) + 3577643008 union { FileTimeT as_file_time;
Windows FileTime имеет другое смещение от времени UNIX, и код, который раньше был в режиме Boost, не генерирует исправьте разницу смещения в некоторых оптимизирующих компиляторах.
Дата 1970 года, скорее всего, происходит из того, как время unix представлено в секундах с 1 января 1970 года. Я предполагаю, что, возможно, это каким-то образом увеличивает время безотказной работы системы в миллисекунд и интерпретируем их как секунды с 01.01.1970. К этой дате подошло бы время безотказной работы чуть более 4 часов.
В отличие от second_clock
, в документации microsec_clock :: universal_time
упоминается: Возвращает время UTC на основе настроек компьютера .
Вам следует проверить свое оборудование настройки часов (или где-либо еще микросекунды получают свои значения).
edit:
Если это не связано с настройками вашего компьютера, это должно быть неправильное поведение при ускорении, в чем я очень сомневаюсь.