如何识别给定历元时间转换为当地时间(时区UTC-8)是否有歧义?例如。历元时间1699173796转换为本地时间(时区UTC-8)时,给出2023年11月5日上午1:43:16,对于相同的本地时间,还有一个历元时间1699177396。如何使用std::chrono或任何其他c++库来识别这种时间二义性。一旦发现时间不确定,如何选择最早/最晚的时间我浏览了std::chrono库,找不到任何API
eimct9ow1#
首先将sys_time转换为本地时间:
sys_time
using namespace std::chrono; auto zone = locate_zone("America/Los_Angeles"); sys_seconds tp(1699173796s); auto local = zone->to_local(tp);
然后将其转换回来:
auto earlier = zone->to_sys(local, choose::earliest); auto later = zone->to_sys(local, choose::latest);
它是模糊的,当且仅当earlier != later。要判断本地时间是否不明确,也可以使用zone->get_info(local).result == local_info::ambiguous。您也可以使用更高级别的zoned_time API来实现这一点,这样做的好处是不会让local_time在没有关联时区的情况下四处浮动:
earlier != later
zone->get_info(local).result == local_info::ambiguous
zoned_time
local_time
zoned_time original("America/Los_Angeles", sys_seconds(1699173796s)); zoned_time earlier(original.get_time_zone(), original.get_local_time(), choose::earliest); zoned_time later(original.get_time_zone(), original.get_local_time(), choose::latest);
1条答案
按热度按时间eimct9ow1#
首先将
sys_time
转换为本地时间:然后将其转换回来:
它是模糊的,当且仅当
earlier != later
。要判断本地时间是否不明确,也可以使用
zone->get_info(local).result == local_info::ambiguous
。您也可以使用更高级别的
zoned_time
API来实现这一点,这样做的好处是不会让local_time
在没有关联时区的情况下四处浮动: