15

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

我有一个时间戳,我认为它是一个 unix 时间戳,当使用以下转换器时,它会正确转换时间戳

值:1365151714493

http://www.epochconverter.com/

我环顾四周,找到了一个关于如何将其转换为 datetime 对象的示例,该方法似乎很简单,创建一个 datetime 对象并将日期设置为 1970 年 1 月 1 日可能的夜晚,并将值添加为秒:

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

问题是每次我用上面的值调用这个方法时,我都会得到一个超出范围异常的值。

我需要先对价值做任何事情吗?字符串转换为双重确定。AddSeconds(double)调用方法时抛出异常

4

2 回答 2

18

该时间戳 (1365151714493) 以毫秒为单位,而不是秒。您需要除以1000AddMilliseconds改为使用。如果将其视为秒,则它是未来约 43,259 年(粗略计算)的日期。DateTime这超出了在 10000 年达到最大值的范围,因此抛出ArgumentOutOfRangeException.

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

您可能还想考虑按照 V4Vendetta 的建议将其强制为 GMT。此外,如果您希望使用多种格式(秒或毫秒),那么对解析值进行快速大小检查可能是谨慎的。

于 2013-04-10T12:54:43.237 回答
6

我想您应该尝试一下,因为它与 GMT 相关

同样来自您提到的站点,它假定该值以毫秒为单位,而不是以秒为单位的传统 unix 时间戳

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
于 2013-04-10T12:50:35.970 回答