回答編集履歴
1
期待値と入力が逆だった模様
test
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
+
調べてみたところ、1451606400000はエポックから**GMT2016年1月1日 0時0分0秒00ミリ秒のミリ秒**ということがわかりました。つまり、このシステムではGMTがデフォルトのタイムゾーンのようです。
|
2
|
+
|
1
|
-
|
3
|
+
その状態で、日本時間2016年1月1日 0時0分0秒00ミリ秒にしろということのようです。SimpleDateFormatやCalendarのタイムゾーンもそれに従うため、
|
2
4
|
|
3
5
|
```java
|
4
6
|
|
@@ -6,10 +8,22 @@
|
|
6
8
|
|
7
9
|
```
|
8
10
|
|
9
|
-
この時点でこれは**
|
11
|
+
この時点でこれは**GMT2016年1月1日 0時0分0秒00ミリ秒**を表します。
|
10
12
|
|
11
|
-
このとき
|
13
|
+
このとき日本時間は**9時間=32400000ミリ秒**進んだ時刻**2016年1月1日 9時0分0秒00ミリ秒**になっています。
|
14
|
+
|
15
|
+
そしてDateはGMTベースのミリ秒で時刻を管理しますので、この**2016年1月1日 9時0分0秒00ミリ秒**の時刻を持ちます。つまり、**期待値より32400000ミリ秒多い時間**が得られてしまうのです。
|
12
16
|
|
13
17
|
|
14
18
|
|
15
|
-
|
19
|
+
変換の時点で日本時間と解釈させるためには、SimpleDateFormatが持つタイムゾーン(正確にはSimpleDateFormatの内部のCalendarが持つタイムゾーン)を日本にする必要があります。
|
20
|
+
|
21
|
+
```java
|
22
|
+
|
23
|
+
//Dateクラスインスタンスを生成
|
24
|
+
|
25
|
+
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
|
26
|
+
|
27
|
+
.setTimeZone(TimeZone.getTimeZone("JST"));
|
28
|
+
|
29
|
+
```
|