我想通过发送std::chrono::local_time的time_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。
发布于 2021-06-04 07:01:23
local_time中的值与sys_time中的值完全相同。例如:
auto lt = local_days{June/3/2021} + 18h + 30min;lt是具有指定值的本地时间。要将其更改为sys_time,只需将local_days更改为sys_days
auto st = sys_days{June/3/2021} + 18h + 30min;即,现在可以断言该st.time_since_epoch() == lt.time_since_epoch()。lt和st之间唯一的区别是语义。
因此,您可以告诉客户端像使用Unix Time一样使用此数字,然后它可以派生年、月、日、日时间信息,然后将该信息视为(假设)其本地时区的本地时间。
在进行“重新解释转换”时,很可能本地指示时间可能不存在,或者可能是不明确的,因为有两个时间。一个人可以通过避免一天中00:00:00 - 04:00:00的时间来增加不遇到这种情况的几率。如果真的遇到这种情况,那么对于如何处理它,没有一个人是正确的答案。您只需在文档的其余部分中声明一个策略。
..。
或者他们只是用C++20编写解析器...:-)
https://stackoverflow.com/questions/67829275
复制相似问题