2017-02-02 3 views
3

私はミリ秒単位で時間を節約しようとしています。私は現在の日付を2009年10月10日午前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)); 

出力:Javaでは

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

私は読みやすい日付にそれらを日時からのミリ秒になって、それが 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を参照してください。

...クラスには、エポック秒を表すlongと、ナノ秒を表すintが格納されます。この秒数は、常に0〜999,999,999の間です。エポック秒は、1970年1月1日00:00:00Zの標準Javaエポックから測定されます。エポック後の瞬間は正の値を、偶数の瞬間は負の値を持ちます。

DateTimedocumentationを参照してください。

時間値は、ティックと呼ばれる100ナノ秒単位で測定され、そして特定の日付は12:00午前0時以降のGregorianCalendarカレンダー年1月1日、0001 AD(CE)(だろう除くティックティック数でありますうるう秒で追加する)。あなたはこれを考慮する必要があります

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

関連する問題