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

Poco::LocalDateTime::timestamp() not converting timestamps to UTC

根据Poco::Timestamp的头文件,时间戳是UTC,见Timestamp documentation。如果时间戳是 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 转换 returning 之前的时间戳,因此函数 returns 是本地时间的时间戳,而不是UTC 时间。

您可以使用 Timestamp::utcTime() 函数或 Timestamp::raw() 函数,但那些 return 不同的类型可以防止您不小心做错事。

您实际上想在这里实现什么?