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 不同的类型可以防止您不小心做错事。
您实际上想在这里实现什么?
根据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 不同的类型可以防止您不小心做错事。
您实际上想在这里实现什么?