将epoch / unix转换为Datetime

时间:2013-04-10 12:46:53

标签: 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));
}

问题是每当我用上面的值调用这个mehod时,我得到一个超出范围异常的值。

我是否需要先对价值做任何事情?字符串转换为双ok。调用AddSeconds(double)方法

时抛出异常

2 个答案:

答案 0 :(得分:15)

该时间戳(1365151714493)以毫秒为单位,而不是秒。您需要除以1000或使用AddMilliseconds。如果它被视为秒,那么将来的某个日期大约为43,459(粗略计算)。这超出了DateTime范围maxes out,在10000年,因此抛出了ArgumentOutOfRangeException

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

您可能还想考虑将其强制为GMT,因为V4Vendetta建议。此外,如果您希望混合使用格式(秒或毫秒),则可能需要对解析后的值进行快速大小检查。

答案 1 :(得分:6)

我想你应该尝试一下,因为这是关于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