以下两个JSON valus(已创建,未使用过)是某种类型的时间戳。提供程序(Edmunds API)除了“timestamp”之外没有指定任何内容。我已经尝试过将标准UNIX转换为.Net Datetime但没有任何工作。
“创建”: 1380292641721 下, “更新”: 1380312585558
以下两种方法不起作用:
internal DateTime ConvertUnixEpochTime(long epoch)
{
long baseTicks = 621355968000000000;
long tickResolution = 10000000;
//long epoch = 1225815911;
long epochTicks = (epoch * tickResolution) + baseTicks;
return new DateTime(epochTicks, DateTimeKind.Utc);
}
public DateTime UnixTimeStampToDateTime(long unixTimeStamp)
{
// Unix timestamp is seconds past epoch
System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
dtDateTime = dtDateTime.AddSeconds(unixTimeStamp).ToLocalTime();
return dtDateTime;
}
有什么建议吗?
答案 0 :(得分:4)
您当前的代码假设值在秒中 - 而自Unix时代以来它看起来像毫秒。所以你想要:
private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0,
DateTimeKind.Utc);
...
DateTime dateTime = UnixEpoch.AddMilliseconds(value);
或使用Noda Time:
Instant instant = Instant.FromMillisecondsSinceUnixEpoch(value);
答案 1 :(得分:2)
使用AddMilliseconds
代替AddSeconds
System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
dtDateTime = dtDateTime.AddMilliseconds(1380312585558).ToLocalTime();