c# - 将纪元/unix 转换为日期时间

标签 c# datetime unix-timestamp

<分区>

这个问题不是重复的,这个问题演示了转换方法的问题,而不是如何执行转换。完整阅读问题。

我有一个我认为是 unix 时间戳的时间戳,当使用以下转换器时它会正确转换时间戳

值:1365151714493

http://www.epochconverter.com/

我环顾四周,发现了一个 example关于如何将其转换为日期时间对象并且该方法看起来很简单,创建一个日期时间对象并将日期设置为 1970 年 1 月 1 日的五月夜,并将值添加为秒:

public static DateTime? ConvertUnixTimeStamp(string unixTimeStamp)
{
    return new DateTime(1970, 1, 1, 0, 0).AddSeconds(Convert.ToDouble(unixTimeStamp));
}

问题是每次我用上面的值调用这个方法时,我都会得到一个值超出范围的异常。

我需要先对这个值做些什么吗?字符串转换为双重确定。调用 AddSeconds(double) 方法时抛出异常

最佳答案

时间戳 (1365151714493) 以毫秒为单位,而不是秒。您需要除以 1000 或改用 AddMilliseconds。如果将其视为秒,则它是 future 大约 43,259(粗略计算)年后的日期。这超出了 DateTime 的范围 maxes out在 10000 年,因此抛出 ArgumentOutOfRangeException

public static DateTime? ConvertUnixTimeStamp(string unixTimeStamp)
{
    return new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(Convert.ToDouble(unixTimeStamp));
}

您可能还想考虑按照 V4Vendetta 的建议强制使用 GMT。此外,如果您希望混合使用多种格式(秒或毫秒),那么对解析值进行快速大小检查可能是明智的。

关于c# - 将纪元/unix 转换为日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15926261/

相关文章:

c# - 如果字符串格式匹配,则提取数字

perl - 在 perl 中限制倒置 DateTime::SpanSet 的更好方法?

php - MySQL 将到期时间戳与当前时间 NOW() 进行比较

c# - 带有 SOS 的 Windgb 不显示结构字段值

c# - ? C# 中的(可空)运算符

python - Pandas :将日期和时间加入一个日期时间列

javascript - Json 到 DateTime - 更改格式

c - 如何在 C 中分解 unix 时间

apache-spark - unix_timestamp()是否可以在Apache Spark中返回以毫秒为单位的unix时间?

c# - 为什么我的 WPF TabControl 会自动切换选项卡?