我正在解析一个XML文件,该文件有一个名为UTCTime的字段,并包含值1311346453064。它还带有一个名为UTC的字段,包含值2011-07-22T10:54:13.064-04:00,我相信这是一个完整的。net DateTimeOffset。第一个字段我不知道。是什么产生了这样一个日期?它太大了,不可能是unix时间戳,因为它在1970年1月1日的基础上增加了大约4.1千禧年。任何帮助在识别它或如何我可以将其转换为日期时间不使用第二个字段将是一个很大的帮助!谢谢。
它相当于unix时间戳[即1970年以来的直接计数],但以毫秒而不是秒为单位。
$ date -d @1311346453
Fri Jul 22 10:54:13 EDT 2011
以3064
结尾对我来说很明显。
static readonly DateTime epoch = new DateTime(1970,1,1,0,0,0,
DateTimeKind.Utc);
long value = 1311346453064L;
var ts = new TimeSpan(value*TimeSpan.TicksPerMillisecond);
var dt = epoch + ts;
或者,以牺牲可读性为代价来提高效率
const long epochTicks = 621355968000000000L;
var dt = new TimeSpan(value*TimeSpan.TicksPerMillisecond+epochTicks,
DateTimeKind.Utc);
注意,这将在另一个字段中丢弃时区信息(-04:00
的偏移量)。
Javascript示例:
D: :: more > date.js
WScript.Echo( new Date().getTime() );
^Z
D: :: cscript date.js
1311975458665
这是自1970年1月1日以来的毫秒数