DateTime返回错误的刻度金额?

时间:2017-02-02 10:44:30

标签: c# datetime

我正在尝试以毫秒为单位节省时间,我希望当前日期是2009年1月10日上午10点。

这个毫秒是1231581600442,我知道每毫秒有10,000个滴答,但DateTime没有返回正确的时间,如果我在那里硬编码并得到滴答,它就不会返回我所拥有的。 / p>

我的代码:

DateTime dateTime = new DateTime(2009, 1, 10, 10, 0, 0, 0);
Debug.Log(player.GetTime() + " - " + dateTime.Ticks);
Debug.Log("DateTime ms: " + dateTime.Ticks / TimeSpan.TicksPerMillisecond);
Debug.Log("Player ms in ticks: " + (player.GetTime() * TimeSpan.TicksPerMillisecond));

输出:

1231581600442 - 633671784000000000
DateTime ms: 63367178400000
Player ms in ticks: 12315816004420000

在Java中,我将它们从DateTime转换为可读日期的毫秒数 10 January 3978 10:00:00

有谁知道为什么这是不正确的以及如何解决它?

1 个答案:

答案 0 :(得分:8)

Java epoch始于1970年(1970-01-01T00:00:00Z),但C#纪元是0001-01-01。

请参阅Java Instant documentation

  

...该类存储一个代表epoch-seconds的长整数和一个代表纳秒秒的int,它总是在0到999,999,999之间。纪元秒是从1970-01-01T00:00:00Z的标准Java纪元测量的,其中纪元之后的时刻具有正值,而早期时刻具有负值。

请参阅DateTime documentation

  

时间值以称为刻度线的100纳秒单位测量,特定日期是GregorianCalendar日历中自公元0001年1月1日午夜12:00起的刻度数(不包括将添加的刻度)闰秒)。

您需要考虑到这一点:

DateTime dateTime  = new DateTime(2009, 1, 10, 10, 0, 0, 0);
DateTime javaEpoch = new DateTime(1970, 1, 1);

long msSinceJavaEpoch = (dateTime.Ticks - javaEpoch.Ticks)/TimeSpan.TicksPerMillisecond;

// Use msSinceJavaEpoch to convert to Java time.