这个问题不重复,这个问题演示了转换方法的问题,而不是如何执行转换。完整阅读问题。
我有一个时间戳,我认为是一个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)
方法
答案 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