Повысьте C++ date_time microsec_clock и second_clock

Я пытаюсь использовать стиль форматирования IDE. Так, мы избегаем новых и скучных определений о том, как записать код и следовательно, ненужные слияния из-за различий в расположении с отступом и формате.

Документация обязательна даже на большей части глупого кода. Это могло быть хорошо, имеют шаблон для генерации строк документации в коде. Соглашение о стандартизации и организации в команде является лучшим стилем.

6
задан afuzzyllama 25 August 2013 в 22:10
поделиться

3 ответа

Не уверен, что для вас может быть не так; точно такой же код работает для меня.

$ 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, не генерирует исправьте разницу смещения в некоторых оптимизирующих компиляторах.

5
ответ дан 17 December 2019 в 00:11
поделиться

Дата 1970 года, скорее всего, происходит из того, как время unix представлено в секундах с 1 января 1970 года. Я предполагаю, что, возможно, это каким-то образом увеличивает время безотказной работы системы в миллисекунд и интерпретируем их как секунды с 01.01.1970. К этой дате подошло бы время безотказной работы чуть более 4 часов.

1
ответ дан 17 December 2019 в 00:11
поделиться

В отличие от second_clock , в документации microsec_clock :: universal_time упоминается: Возвращает время UTC на основе настроек компьютера .
Вам следует проверить свое оборудование настройки часов (или где-либо еще микросекунды получают свои значения).

edit:
Если это не связано с настройками вашего компьютера, это должно быть неправильное поведение при ускорении, в чем я очень сомневаюсь.

1
ответ дан 17 December 2019 в 00:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: