Согласно заголовочному файлу Poco::Timestamp
временные метки указаны в формате UTC, см. документацию по временным меткам. Если временные метки указаны в формате UTC, не должен ли метод, преобразующий Poco::LocalDateTime
в Poco::Timestamp
, убедиться, что возвращаемая временная метка находится в формате UTC? В настоящее время Poco::LocalDateTime::timestamp()
этого не делает, и временная метка возвращается по местному времени.
Это особенно странно, поскольку оператор присваивания Poco::LocalDateTime::operator = (const Timestamp& timestamp)
выполняет преобразование времени UTC в местное. Следующий код утверждает из-за этого:
Poco::LocalDateTime local1 = Poco::LocalDateTime( 2020, 1, 30 );
Poco::Timestamp timestamp = local1.timestamp();
Poco::LocalDateTime local2 = timestamp;
assert( local1 == local2 );
local1
не будет иметь того же значения, что и local2
в этом примере. Мне одному кажется, что это странное поведение?
Poco::Timestamp timestampFromLocalTime = Poco::Timestamp::fromUtcTime( Poco::LocalDateTime( 1970, 1, 1 ).utcTime() );
- person Martin Arvidssson   schedule 30.01.2020LocalDateTime::timestamp()
, вы увидите, что он преобразует метку времени перед возвратом черезTimestamp::fromUtcTime
, так что эта функция возвращает метку времени в местном времени, а не во времени UTC. - person Cookie Butter   schedule 13.03.2020Timestamp::utcTime()
или функциюTimestamp::raw()
, но они возвращают разные типы, чтобы вы случайно не сделали что-то не так. Чего вы на самом деле пытаетесь достичь здесь? - person Cookie Butter   schedule 13.03.2020