2013-04-10 117 views
10

这是问题不是重复的,这个问题演示了一种转换方法的问题,而不是如何执行转换。阅读完整的问题。将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当异常被抛出

+0

很确定时间标记以毫秒为单位,不是_秒。编辑:除非......你知道......它应该代表未来4359年的日期。 – 2013-04-10 12:51:21

+0

这是如何复制?您提供的链接是询问如何进行转换。我在尝试进行转换时询问有关问题! – 2013-04-10 13:06:52

回答

14

该时间戳(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建议。另外,如果您希望混合使用格式(秒或毫秒),则对解析值进行快速大小检查可能会比较谨慎。

+0

完全忽略了数值为毫秒的可能性,因为我阅读的每篇文章都给出了时间戳的例子,以秒为单位,我认为给予的值是相同的。谢谢 – 2013-04-10 13:08:43

5

我想你应该尝试它,因为它是相对于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 
相关问题