【问题标题】:Convert epoch/unix to Datetime [duplicate]将纪元/unix转换为日期时间[重复]
【发布时间】:2013-04-02 07:38:59
【问题描述】:

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

我有一个时间戳,我认为它是一个 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)方法时抛出异常

【问题讨论】:

  • 很确定时间戳是以毫秒为单位的,不是秒。编辑:除非......你知道......它应该代表未来 43,259 年的日期。
  • 这是怎么复制的????您提供的链接是询问如何进行转换。我在尝试进行转换时询问一个问题!

标签: c# datetime unix-timestamp


【解决方案1】:

我想你应该尝试一下,因为它是关于 GMT 的

同样来自您提到的网站,它假定该值以毫秒为单位,而不是传统的unix timestamp as in seconds

DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
epoch = epoch.AddMilliseconds(yourvalue);// your case results to 4/5/2013 8:48:34 AM

【讨论】:

    【解决方案2】:

    时间戳 (1365151714493) 以毫秒为单位,而不是秒。您需要除以1000 或改用AddMilliseconds。如果将其视为秒,则它是未来约 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。此外,如果您希望使用多种格式(秒或毫秒),那么对解析值进行快速大小检查可能是谨慎的。

    【讨论】:

    • 完全忽略了值是毫秒的可能性,因为我阅读的每篇文章都给出了时间戳以秒为单位的示例,我假设给我的值是相同的。谢谢
    猜你喜欢
    • 2016-09-15
    • 2013-01-08
    • 2018-12-27
    • 2018-08-03
    • 2018-10-01
    • 2020-02-21
    • 2021-05-26
    • 2014-01-25
    相关资源
    最近更新 更多