Poco::LocalDateTime::timestamp() 不将时间戳转换为 UTC



根据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值相同。我是唯一一个认为这是奇怪行为的人吗?

如果您查看LocalDateTime::timestamp(),您会发现它在通过Timestamp::fromUtcTime返回之前转换时间戳,以便该函数返回本地时间的时间戳,而不是 UTC 时间。

您可以使用Timestamp::utcTime()函数或Timestamp::raw()函数,但它们返回不同的类型,以防止您意外地做错事。

你在这里到底想实现什么?

最新更新