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

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

概述如何将纪元时间(unix时间戳)转换为D中的标准时间?有没有办法自定义格式? 你真的应该把问题分开,而不是同时问两个完全不同的问题. 如何将纪元时间(unix时间戳)转换为D中的标准时间? 如果你需要从unix时间转换为SysTime的“std time”,那么你使用unixTimeToStdTime: assert(unixTimeToStdTime(0) == (Date(1970, 1, 1 如何将纪元时间(unix时间戳)转换为D中的标准时间?有没有办法自定义格式?解决方法 你真的应该把问题分开,而不是同时问两个完全不同的问题.

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

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

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

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

@H_301_19@auto epochInLocalTime = SysTime(Date(1970,1),UTC()).tolocalTime();

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

@H_301_19@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,那么我建议你这样做,因为它应该给你一个很好的概述模块以及如何使用它.

总结

以上是内存溢出为你收集整理的linux – 如何将D中的纪元时间(unix时间戳)转换为标准(年 – 月 – 日)全部内容,希望文章能够帮你解决linux – 如何将D中的纪元时间(unix时间戳)转换为标准(年 – 月 – 日)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/1018590.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存