将epoch/unix转换为日期时间
这是问题不是重复的,这个问题演示了一种转换方法的问题,而不是如何执行转换。阅读完整的问题。将epoch/unix转换为日期时间
我有一个时间戳,我相信这是一个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时,我得到的值超出范围异常。
我是否需要先对值做任何事情?该字符串转换为双精细确定。调用AddSeconds(double)
methos当异常被抛出
该时间戳(1365151714493)以毫秒为单位,而不是秒。您需要除以1000
或使用AddMilliseconds
。如果将它看作秒,那么未来的日期约为4359年(粗略计算)。这超出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建议。另外,如果您希望混合使用格式(秒或毫秒),则对解析值进行快速大小检查可能会比较谨慎。
完全忽略了数值为毫秒的可能性,因为我阅读的每篇文章都给出了时间戳的例子,以秒为单位,我认为给予的值是相同的。谢谢 – 2013-04-10 13:08:43
我想你应该尝试它,因为它是相对于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
很确定时间标记以毫秒为单位,不是_秒。编辑:除非......你知道......它应该代表未来4359年的日期。 – 2013-04-10 12:51:21
这是如何复制?您提供的链接是询问如何进行转换。我在尝试进行转换时询问有关问题! – 2013-04-10 13:06:52