如何将格式为 2018-12-27T02:23:29 的字符串转换为 C# 中的 Unix 时间戳
Posted
技术标签:
【中文标题】如何将格式为 2018-12-27T02:23:29 的字符串转换为 C# 中的 Unix 时间戳【英文标题】:How to convert a string formatted like 2018-12-27T02:23:29 to Unix Timestamp in C# 【发布时间】:2019-06-06 13:14:59 【问题描述】:我假设我应该只是将字符串解析为 DateTime 并从那里开始......但是有没有更好的方法呢?
【问题讨论】:
什么是“更好的方法”?你为什么要以另一种方式来做呢?您有什么具体的事情想要完成或确定吗? How to get the unix timestamp in C#的可能重复 【参考方案1】:您可以使用DateTimeOffset
结构,它有一个可以使用的ToUnixTimeSeconds
(或ToUnixTimeMilliseconds
)方法:
long unixTimestamp = DateTimeOffset.Parse("2018-12-27T02:23:29").ToUnixTimeSeconds();
如果你好奇它是如何完成的,来源在这里:https://referencesource.microsoft.com/#mscorlib/system/datetimeoffset.cs,8e1e87bf153c720e
【讨论】:
是的...这就是我要找的东西!【参考方案2】:您应该使用 DateTime.Parse/ParseExact
系列函数中的某些东西将其解析为普通的 DateTime
对象,然后调用如下方法:
public int ToUnixTime(DateTime d)
var epoch = new DateTime(1970,1,1);
return (int)(d - epoch).TotalSeconds;
【讨论】:
【参考方案3】:DateTime 在公历中内部存储自“0001 年 1 月 1 日午夜 12:00:00(0001 年 1 月 1 日 0:00:00 UTC)以来的“滴答”(一个发明的 Time unit)。作为 Int64/Long 数。因此,DateTime 在可能的值上轻松击败了 UnixTime。转换为 DateTime 应该是无损的。
任何 ToString() 调用,任何其他 Property 调用都将根据这些 Ticks(以及 ToString() 的区域性/时区设置)简单地计算值。其他一切都只是 Tick 值的解释。
您应该解析为 DateTime。从 Ticks 到像 UnixTime 这样不精确的东西是简单的数学运算。请参阅 Joels 的回答。
但请注意,DateTimes 的精度和准确性并不完全匹配:https://blogs.msdn.microsoft.com/ericlippert/2010/04/08/precision-and-accuracy-of-datetime/ DateTime.Now 通常只会以 18 毫秒的步长为您提供返回值。甚至秒表也存在值
【讨论】:
以上是关于如何将格式为 2018-12-27T02:23:29 的字符串转换为 C# 中的 Unix 时间戳的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 T 和 Z 将 LocalDate 格式化为 ISO 8601?
JAVA中,如何将日期2013-06-27T00:00:00+08:00 转换为 2013-06-27 就是不要T后后面的数据?