我正在尝试以毫秒为单位节省时间,我希望当前日期是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
有谁知道为什么这是不正确的以及如何解决它?
答案 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.