c++ 使用std::chrono识别不明确的本地时间

j2cgzkjk  于 2023-03-25  发布在  其他
关注(0)|答案(1)|浏览(178)

如何识别给定历元时间转换为当地时间(时区UTC-8)是否有歧义?
例如。历元时间1699173796转换为本地时间(时区UTC-8)时,给出2023年11月5日上午1:43:16,对于相同的本地时间,还有一个历元时间1699177396。
如何使用std::chrono或任何其他c++库来识别这种时间二义性。
一旦发现时间不确定,如何选择最早/最晚的时间
我浏览了std::chrono库,找不到任何API

eimct9ow

eimct9ow1#

首先将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在没有关联时区的情况下四处浮动:

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);

相关问题