在Javascript和C#中计算的时间戳是不同的

Raj*_*mar 0 javascript c# datetime timestamp

我计算TimeStampjavascript使用下面的代码

var timestamp = new Date;

这给我的结果1436504446858包含13数字取决于当前时间.

C#使用以下代码计算相同的事情

DateTime centuryBegin = new DateTime(1970, 1, 1);
DateTime currentDate = DateTime.Now;
long elapsedTicks = currentDate.Ticks - centuryBegin.Ticks;
Run Code Online (Sandbox Code Playgroud)

在这里,我得到14365252465308044包含17数字的结果

为什么这两种方法有如此大的差异?

Jon*_*eet 7

为什么这两种方法有如此大的差异?

Javascript代码为您提供自Unix纪元以来的毫秒数.

.NET代码(如果你做得对 - 在一秒钟内就更多了)会给你自Unix时代以来的滴答数.每秒有1000万个滴答,因此每毫秒有10,000个滴答.这就是为什么你得到4位数的原因.

现在,另一个问题是您的.NET代码正在使用本地时间 - 而它应该反映UTC时间,因为您正在查找自Unix时代(即1月1日午夜)以来的滴答数(或毫秒数). 1970年UTC.所以你要:

DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
DateTime utcNow = DateTime.UtcNow;
TimeSpan elapsedTime = utcNow - unixEpoch;
double millis = elapsedTime.TotalMilliseconds;
Run Code Online (Sandbox Code Playgroud)

请注意如果你把时间差表示为a TimeSpan,你可以把它转换成你感兴趣的单位.(虽然TimeSpan只是"一段时间",它不知道开始/结束,所以你可以'用它来找出可变长度单位的差异,例如年和月.)