首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在std::chrono::local_time中,time_since_epoch()实际上代表什么?

在std::chrono::local_time中,time_since_epoch()实际上代表什么?
EN

Stack Overflow用户
提问于 2021-06-04 06:16:20
回答 1查看 185关注 0票数 2

我想通过发送std::chrono::local_timetime_since_epoch().count()值来序列化它。我的问题是,非C++的接收者应该如何解释这个值?这是自本地午夜(1970-01-01T00:00:00)纪元以来的实际滴答数吗?夏令时的改变呢?time_since_epoch()是挂钟时间的双射吗?也就是说,是否可以有两个std::chrono::local_time::time_since_spoch()值来表示相同的挂钟/日历时间?

我在通常的地方找不到关于std::chrono::local_time::time_since_spoch()解释的详细信息: cppreference、最新的C++标准草案或Howard Hinnant的date library documentation

你可能会问,“为什么还要序列化std::chrono::local_time呢?”好吧,一个用例将是一个建筑自动化系统,它必须在特殊的一天在给定的当地时间执行特定的任务,而不考虑时区或夏令时。例如,“在2021年地球日(4月22日)当地时间20:00关灯。

编辑:“为什么不将其序列化为ISO8601日期/时间(没有任何偏移量)?”我想使用二进制协议将它序列化为一个紧凑的数字,比如CBOR。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-04 07:01:23

local_time中的值与sys_time中的值完全相同。例如:

代码语言:javascript
复制
auto lt = local_days{June/3/2021} + 18h + 30min;

lt是具有指定值的本地时间。要将其更改为sys_time,只需将local_days更改为sys_days

代码语言:javascript
复制
auto st = sys_days{June/3/2021} + 18h + 30min;

即,现在可以断言该st.time_since_epoch() == lt.time_since_epoch()ltst之间唯一的区别是语义。

因此,您可以告诉客户端像使用Unix Time一样使用此数字,然后它可以派生年、月、日、日时间信息,然后将该信息视为(假设)其本地时区的本地时间。

在进行“重新解释转换”时,很可能本地指示时间可能不存在,或者可能是不明确的,因为有两个时间。一个人可以通过避免一天中00:00:00 - 04:00:00的时间来增加不遇到这种情况的几率。如果真的遇到这种情况,那么对于如何处理它,没有一个人是正确的答案。您只需在文档的其余部分中声明一个策略。

..。

或者他们只是用C++20编写解析器...:-)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67829275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档