加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 如何将D中的纪元时间(unix时间戳)转换为标准(年 – 月

发布时间:2020-12-13 23:04:41 所属栏目:Linux 来源:网络整理
导读:如何将纪元时间(unix时间戳)转换为D中的标准时间?有没有办法自定义格式? 解决方法 你真的应该把问题分开,而不是同时问两个完全不同的问题. 如何将纪元时间(unix时间戳)转换为D中的标准时间? 如果你需要从unix时间转换为SysTime的“std time”,那么你使用u
如何将纪元时间(unix时间戳)转换为D中的标准时间?有没有办法自定义格式?

解决方法

你真的应该把问题分开,而不是同时问两个完全不同的问题.

如何将纪元时间(unix时间戳)转换为D中的标准时间?

如果你需要从unix时间转换为SysTime的“std time”,那么你使用unixTimeToStdTime:

assert(unixTimeToStdTime(0) == (Date(1970,1,1) - Date.init).total!"hnsecs");

因此,如果您执行SysTime(unixTimeToStdTime(0)),您将在1970年1月1日午夜时间(即纪元时间)的当地时区获得SysTime.与其他SysTime构造函数不同,它不会将给定的时间视为在给定的时区内.相反,它只是将stdTime设置为给定值,并且它是给定值的时区.因此,要构建与其他构造函数相同的SysTime,您可以执行类似的操作

auto epochInLocalTime = SysTime(Date(1970,1),UTC()).toLocalTime();

如果要以相反的方向转换,stdTimeToUnixTime会将std时间转换为unix时间.但是,SysTime必须在它上面使用UnixTime,这样你通常不需要stdTimeToUnixTime.

time_t epoch = epochInLocalTime.toUnixTime();

但是,需要注意的一点是,std.datetime真正处理unix时间 – time_t始终被认为是UTC.这很重要的原因是,由于一些莫名其妙的原因,Windows将本地时间的DST应用于time_t,以便UTC偏移永远不会改变,这意味着它对于一年中的大部分都是错误的.它适用于使用time_t的所有Microsoft函数,因为它们期望无意义,但如果您尝试将Windows time_t与另一个框或使用std.datetime等实际正确使用time_t的库一起使用,则会出现互操作性问题.

有没有办法自定义格式?

你的意思是你正在寻找一种方法来为表示时间的字符串(如C的strftime)提供用户定义的格式? std.datetime还没有. API仍然需要为它设计.已经进行了一些讨论,但尚未得到解决.所以,它最终会发生,但可能会有一段时间.

在此期间,您必须使用ISOString,toISOExtString和toSimpleString,它们分别使用ISO格式,ISO扩展格式和Boost的简单字符串格式.一般来说,我建议使用toISOExtString,因为它很容易被人类和标准阅读.通常最好在与其他计算机通信时将其置于UTC(例如sysTime.toUTC())(而不是将其打印出来供人类使用),因为时区是其中的一部分,而不像LocalTime那样.附加时区.

如果你还没有读过this article on std.datetime,那么我建议你这样做,因为它应该给你一个很好的概述模块以及如何使用它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读