2017-05-27 5 views
1

次の行を同じ値を返しますのJava 8 - toEpochSecondが異なるタイムゾーンに

System.out.println(Instant.now().atZone(ZoneId.of("GMT+04")).toEpochSecond()); 
System.out.println(Instant.now().atZone(ZoneId.of("GMT+02")).toEpochSecond()); 

彼らは異なるタイムゾーンにある場合でも、同じ値を返すが、私は何か間違ったことか、私は単純にこれがどのように機能するか誤解だろうか? javadoc 1として

答えて

4

toEpochSecond()definition of epochに準拠し、UTC 1970-01-01午前0時00分00秒からの秒数を示します。

期待される結果です:両方の瞬時値は同じです。区画化された値に変換された後、それらは両方とも、時間帯にかかわらず、の同じ時点であるを表します。したがって、エポックから秒に変換され、同じ価値を得る。

私は段階的にしようとした場合:

// Now: 
2017-05-27T23:46:00.324Z 
// Now GMT+04: 
2017-05-28T03:46:00.324+04:00[GMT+04:00] 
// Now GMT+02: 
2017-05-28T01:46:00.324+02:00[GMT+02:00] 
// Both values represent the same point in time, i.e. that many seconds since epoch (which is defined UTC): 
1495928760 

私は、これはより多くの混乱をもたらすポイント家を後押ししていないことを願っています。この他の結果(UTCベースとしてエポックの定義は)もしあなたのことですチリ、ウガンダ、またはモンゴルの同じ瞬間にSystem.currentTimeMillis()を実行すると、同じ値(システムクロックが適切に同期されていること)が得られます。

+0

ありがとうございました。タイムゾーンに基づいて1970年1月1日からの秒数を返す例を提供できますか? –

+1

私はモバイルで、しばらくの間、良いコードスニペットを表示することはできません。しかし、また...申し訳ありませんが、私はその質問を理解していません。変換したいものの入力と出力(タイプと値)は何ですか? (言い換えれば、XがYの場合はX&Yを定義してください) –

+5

@DouaBeri:これは非常に奇妙なことですが、間違ったことをしようとしていることを示唆しています。実際に何を達成しようとしていますか? –

関連する問題