日付に問題があります。
これらのミリ秒 1317322560000 は、イタリアの 2011 年 9 月 29 日木曜日 18:56:00 GMT+02:00 の日付を表していると確信しています。
ただし、Calendar クラスを使用すると、日付は Thu Sep 29 20:56:00 GMT+02:00 になります。これは、夏のスケジュールが有効になっているためだと思います。
ミリ秒を対応する日付に変換するにはどうすればよいですか?
System.currentTimeMillis() は、「現在時刻と UTC 1970 年 1 月 1 日午前 0 時との差 (ミリ秒単位)」を返します。(つまり、GMT)。
したがって、「日付」1317322560000 は 29/09/2011:18:56:00 GMT です。イタリアでは、9 月 29 日の GMT からのオフセットは +2 時間です (「夏時間」または技術的に言えば DST =サマータイムのため)。30/10/2011:03:00:00 (ちなみに次の日曜日) から、イタリアでは「冬時間」(DST なし) になるため、オフセットは +1 になります)。
したがって、Thu Sep 29 20:56:00 CEST 2011 (18:56:00 + イタリアのタイム ゾーンでの 2 時間のオフセット) が正しく取得されます。このすべてを示すこのコードを確認してください (Groovy です)。
import java.text.DateFormat
import java.util.TimeZone
println Locale.getDefault()
Date d = new Date(1317322560000)
println d
Locale.setDefault(new Locale("it", "IT"))
println Locale.getDefault()
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
println df.getTimeZone().getOffset(1317322560000) + " => +2h offset in 'summer time' (DST on)"
df.setTimeZone(TimeZone.getTimeZone("GMT+00:00"))
println df.format(d)
df.setTimeZone(TimeZone.getTimeZone("GMT+01:00"))
println df.format(d)
df.setTimeZone(TimeZone.getTimeZone("GMT+02:00"))
println df.format(d)
df.setTimeZone(TimeZone.getTimeZone("Europe/Rome"))
println df.format(d)
println "---"
Date winterDate = new Date(1321382560000)
println winterDate
println df.getTimeZone().getOffset(1321382560000) + " => +1h offset in 'winter time' (DST off)"
この結果:
es_ES
Thu Sep 29 20:56:00 CEST 2011
it_IT
7200000 => +2h offset in 'summer time' (DST on)
giovedì 29 settembre 2011 18.56.00 GMT+00:00
giovedì 29 settembre 2011 19.56.00 GMT+01:00
giovedì 29 settembre 2011 20.56.00 GMT+02:00
giovedì 29 settembre 2011 20.56.00 CEST
---
Tue Nov 15 19:42:40 CET 2011
3600000 => +1h offset in 'winter time' (DST off)
new Date(1317322560000l)
出力
Thu Sep 29 20:56:00 CEST 2011
あなたのカレンダーと同じです。なぜそれが必要なの18:56
ですか?