2017-06-30 8 views
0

誰でもISTとESTの実際の差が9.5時間であるのに対し、次のコードが10.5時間を返す理由を教えてください。 getRawOffset()を使用異なるタイムゾーンからの時間の差

:のgetOffset()を使用

System.out.println(TimeZone.getDefault().getRawOffset() - TimeZone.getTimeZone("EST").getRawOffset()); 

TimeZone current = TimeZone.getDefault(); 
TimeZone db = TimeZone.getTimeZone("EST"); 
long now = System.currentTimeMillis(); 
System.out.println(db.getOffset(now) - current.getOffset(now)); 

私のJVMが

+1

"EST" を使用しないでください。たぶん、あなたは、EDTはなくEST

参照がしたいです。 「America/New_York」を使用してください(そうでない場合は他のOlson ID)。 –

+0

素晴らしい!出来た 。ありがとう。答えとして追加することができます。 – Rehman

答えて

2

reasons ...によりISTのタイムゾーンであり、 " EST "は夏時間の変化を観察しません(同様に、HSTとMSTはそうではありませんが、P ST(およびその他)が行う)。

代わりに"America/New_York"を使用してください。

注JDK 1.1.xとの互換性のためにJavadoc

3文字のタイムゾーンIDが

内のステートメントは、そのような「PST」など、いくつかの他の3文字のタイムゾーンIDが(、 " CTT "、" AST ")もサポートされています。ただし、複数のタイムゾーンで同じ略語が頻繁に使用されるため(たとえば、「CST」は米国の「中央標準時」および「中国標準時」になる可能性がある)、Javaプラットフォームではそれら。

「IST」は、「アイルランド標準時」、「イスラエル標準時」および「インド標準時」を参照できます。 3文字の略語を使用して、タイムゾーンを参照しないでください。

1

ISTはUTC + 5:30とESTはUTC-5:00

だから、私たちの間に10時30分があります。ところでhttps://www.timeanddate.com/worldclock/converter.html?iso=20170630T090000&p1=tz_ist&p2=tz_est&p3=tz_et

、Javaの8のコードは次のようになります:

final LocalDateTime ist = LocalDateTime.now(ZoneId.of("IST", ZoneId.SHORT_IDS)); 
    final LocalDateTime est = LocalDateTime.now(ZoneId.of("EST", ZoneId.SHORT_IDS)); 
    System.out.println(Duration.between(ist, est)); // Prints PT-10H-30M0.001S 
+1

私は最近のJava 8クラス(Java 6と7にもバックポートされている)の使用を躊躇していますが、私はまだ他の答えに同意しています:** 3つの**(そして4つの)タイムゾーンの略語**。 –

+1

私も彼に同意します;) – Prim

+1

'EDT'は' TimeZone'クラスで認識されたタイムゾーンではないので、誤って 'GMT 'を使用することになります。 –

関連する問題