将epoch/unix转换为Datetime

And*_*ark 13 c# datetime unix-timestamp

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

我有一个时间戳,我相信是一个unix时间戳,当使用以下转换器时,它正确转换印章

价值:1365151714493

http://www.epochconverter.com/

我环顾四周,发现了一个例子就如何将其转换为datetime obect和方法看似简单,创建一个DateTime对象,并设置日期威力晚上1/1/1970,并添加值作为第二:

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

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

我是否需要先对价值做任何事情?字符串转换为双ok.调用时抛出异常AddSeconds(double)methos

Chr*_*air 15

该时间戳(1365151714493)以毫秒为单位,而不是秒.你需要除以1000或使用AddMilliseconds.如果它被视为秒,那么将来的某个日期大约为43,459(粗略计算).这是超出了范围DateTime,其马克塞斯在一年10000,从而投掷ArgumentOutOfRangeException.

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

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


V4V*_*tta 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
Run Code Online (Sandbox Code Playgroud)