0
Date now = new Date();
long timeInterval = now.getTime() - (15705 * 24 * 60 * 60 * 1000L);
long hours = timeInterval / (60 * 60 * 1000L);
LOG.debug(String.format("current date:%s, timeInterval:%d,hours:%d",now.toString(),timeInterval, hours));

システムが出力した結果 (15705 は 1970 年代からの日数を意味します):

12/12/31 22:06:47 DEBUG stat.TimeTest: 現在の日付:Mon Dec 31 22:06:47 CST 2012、timeInterval:50807153、hours:14

現在の時間は 21 時間ですが、結果は 14 時間と表示されます。

4

2 に答える 2

4

Mon Dec 31 22:06:47 CST 2012Mon Dec 31 14:06:47 2012エポックの開始に使用されるタイムゾーンである GMT 時間です。

つまり、now.getTime()1970 年 1 月 1 日 00:00:00 GMT からのミリ秒数を返し、別のタイム ゾーンを使用します。

于 2012-12-31T14:15:39.943 に答える
2

now.getTime()は、UTCミリ秒単位の値(つまりGMT + 0)を取得します。あなたが示したログプリントはおそらくシステムタイムゾーンを使用しており、22:06:47であり、おそらくイギリスの近くにはありませんでした:-)

また、日付の算術にはCalendarクラスを使用してください。これは、コードとは異なり、うるう年、うるう秒、タイムゾーンの変更などが考慮されるためです(UTCでは発生しないため、他のゾーンでは発生する可能性があります)

于 2012-12-31T14:18:31.720 に答える