如何将格式为 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 时间戳的主要内容,如果未能解决你的问题,请参考以下文章

查找用户在 mongoDB 中花费的总时间

查找用户在 mongoDB 中花费的总时间

如何使用 T 和 Z 将 LocalDate 格式化为 ISO 8601?

JAVA中,如何将日期2013-06-27T00:00:00+08:00 转换为 2013-06-27 就是不要T后后面的数据?

如何将 UTC 转换为 IST 时间格式 [重复]

如何将 ISO8601 格式转换为毫秒?