【问题标题】:DateTime returning wrong tick amount?DateTime 返回错误的刻度量?
【发布时间】:2017-02-03 05:31:50
【问题描述】:

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

这以毫秒为单位是1231581600442,我知道每毫秒有 10,000 个滴答声,但 DateTime 没有返回正确的时间,如果我在那里对其进行硬编码并得到滴答声,它不会返回我所拥有的。

我的代码:

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

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

【问题讨论】:

  • 你能提供一个minimal reproducible example吗?我希望能够复制、粘贴和运行您的代码。
  • 如何将毫秒解析为 Datetime ?可能是格式的问题

标签: c# datetime


【解决方案1】:

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

请参阅 Java Instant documentation

...该类存储一个表示纪元秒的 long 和一个表示纳秒秒的 int,它始终在 0 到 999,999,999 之间。纪元秒是从标准 Java 纪元 1970-01-01T00:00:00Z 开始测量的,其中纪元之后的瞬间具有正值,而更早的瞬间具有负值。

DateTimedocumentation

时间值以 100 纳秒为单位,称为滴答声,特定日期是公历中自公元 01 年 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.

【讨论】:

  • 写的基本一样。 +1
  • 非常感谢您的帮助!
猜你喜欢
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
相关资源
最近更新 更多