Poco :: LocalDateTime :: timestamp () не преобразует метки времени в UTC - PullRequest
1 голос
/ 30 января 2020

Согласно заголовочному файлу Poco :: Timestamp, временные метки указаны в UT C, см. Документация по временным меткам . Если мои локальные часы установлены на часовой пояс UT C + 1 и я выполняю следующий код:

Poco::Timestamp timestampFromUTCTime = Poco::DateTime( 1970, 1, 1 ).timestamp();
Poco::Timestamp timestampFromLocalTime = Poco::LocalDateTime( 1970, 1, 1 ).timestamp();

Какое ожидаемое значение timestampFromLocalTime?

Я ожидаю получить -3600 секунд, но получаю 0, то же значение, что и timestampFromUTCTime.

Следующий код подтверждает

Poco::LocalDateTime originalLocalDateTime( 2020, 1, 30 );
Poco::Timestamp timestamp = originalLocalDateTime.timestamp();
Poco::LocalDateTime newLocalDateTime = timestamp;
assert( originalLocalDateTime == newLocalDateTime );

Если a Timestamp можно создать из LocalDateTime, а LocalDateTime можно создать из Timestamp, по моему мнению, библиотека должна обрабатывать необходимые преобразования.

1 Ответ

0 голосов
/ 19 марта 2020

Если вы посмотрите на LocalDateTime::timestamp(), то увидите, что он преобразует метку времени перед возвратом через Timestamp::fromUtcTime, так что функция возвращает метку времени по местному времени, а не по UT C time.

Вы можете использовать функция Timestamp::utcTime() или функция Timestamp::raw(), но они возвращают различные типы, чтобы предотвратить случайное неправильное действие.

Чего вы на самом деле пытаетесь достичь здесь?

...