2017-02-02 2 views
3

Я пытаюсь сэкономить время в миллисекундах, и я хочу, чтобы текущая дата была 10 января 2009 года в 10 утра.DateTime возвращает неправильное количество галочек?

Это в миллисекундах 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

Кто-нибудь знает, почему это неверно и как его решить?

+0

Можете ли вы обеспечить [mcve]? Я хотел бы иметь возможность копировать, вставлять и запускать ваш код. – Enigmativity

+0

Как вы анализируете miliseconds в Datetime? Вероятно, это проблема с форматом –

ответ

8

Java epoch - начало 1970 года (1970-01-01T00:00:00Z), но эпоха C# - 0001-01-01.

См. Java Instantdocumentation.

... класс хранит длинную представляющую эпоху-секунд и int, представляющую наносекундную секунду, которая всегда будет между 0 и 999 999 999. Эпоха-секунды измеряются со стандартной эпохи Java 1970-01-01T00: 00: 00Z, где моменты после эпохи имеют положительные значения, а более ранние моменты имеют отрицательные значения.

См. DateTimedocumentation.

Значения времени измеряются в 100-наносекундных единицах, называемых тиков, и конкретная дата количество тиков с тех пор 12:00 полночь, 1 января, 0001 AD (CE) в календаре GregorianCalendar (за исключением клещей, которые добавляется секундомерами).

Вам нужно учесть следующее:

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. 
+0

Написал в основном то же самое. +1 – Jcl

+0

Большое спасибо за помощь! – bwfcwalshy

Смежные вопросы