2016-11-03 3 views
4

トルコは最近確定した(2016年9月6日)、Daylight Saving Time (DST)に永続的にとどまるように決めました。この行為により、2016年10月30日の04:00:00に予定されていたDSTの終了がキャンセルされました。クロックは変更されませんでした。七面鳥のJavaタイムゾーン(夏時間の拒否)

トルコは+2 and +3 utcの間ですので、現在は+3にとどまります。 ここでは、

https://www.timeanddate.com/time/change/turkey/ankara?year=2016

...とWikipediaのページでは、Time in Turkey、このヒュッリイェトデイリーニュースの記事、Turkey to implement daylight savings time year-roundを見ることができます。

ここで議論していますが、私はSpring Bootでアプリケーションを持っています。

Android TimeZone Turkey GMT

cmntWrapper.setCreatedAtString(cmnt.getCreatedAt(). 
now(ZoneId.of(Constants.TURKEY_ZONE)). 
format(DateTimeFormatter.ofPattern(Constants.DATE_TIME_FORMAT))); 

これは私が私の日付を取る方法です。

これは現在時刻が13.50ですが、現在は14.50です。私たちは+3にいるので。

私は何ができますか?

私はutc + 3を使いたいと思っています。「夏時間のコンセプトに切り替えるにはもう一度+2 + 3回使うことができます。だから私は危険を冒すことはできない。

今後数週間でコードを変更することはできませんが、数週間後には変更されません。

あなたは永久に何をお勧めしますか?

また、私はどのようにJavaを作ることができますか? 〜$のJavaバージョン プログラムのJava」は以下のパッケージに記載されています: *デフォルト-jreを * GCJ-4.8私のテストLinuxマシンのために、PU-APP-01 @このください

puappを参照してくださいので、 -jre - ヘッドレス * OpenJDKの-7-jreを-ヘッドレス * GCJ-4.6-jreを-ヘッドレス * OpenJDKの-6-jreを-ヘッドレス てみます。sudo apt-getのPU-APP-01 @ puappをインストール:〜$

PU-APP-01 @ puapp:〜$ whereisはjavaの のjava:を/ usr/share/javaの puapp PU-APP-01 @:〜$

puapp @ PU-APP-01:〜$ whereis java java:/ usr/share/java

しかし、私はjavaを持っています。

ビーガン@ビーガン:〜$のJava -version Javaのバージョン "1.8.0_111" のJava(TM)SE Runtime Environmentに は、Java HotSpot(TM)64ビットサーバーVM(1.8.0_111-B14の構築)(ビルド25.111-b14、混合モード) vegan @ vegan:〜$

ローカルは重要ではありません。そのLinuxサーバーは重要ではありません。

と私たちのメインマシンの

は、Javaの

[email protected]:~$ java -version 
java version "1.8.0_91" 
Java(TM) SE Runtime Environment (build 1.8.0_91-b14) 
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode) 
[email protected]:~$ 
+0

私の答えを見てください:http://stackoverflow.com/a/40416306/6804200私はこれを解決できません。私は再び詰め込みを更新したくなかった。私は答えとして追加しました。 – mark

答えて

5

それが新しいタイムゾーン情報が含まれている場合、JDK/JREを更新することですこれを行うれる好ましい方法があります。含まれていない場合は、これを行う正しい正式な方法は、Timezone Updater Toolを使用してタイムゾーン情報を更新することです。

The TZUpdater tool is provided to allow you to update installed Java Development Kit (JDK) and Java Runtime Environment (JRE) software with more recent timezone data, to accommodate daylight saving time (DST) changes in different countries. Oracle relies on the timezone data publicly available through IANA's Time Zone Database.

Oracle recommends that you use the latest Oracle Java SE platform JDK or JRE update release as the preferred means of delivering both timezone data updates and other product improvements, such as security fixes. To see which JDK or JRE update release incorporates the updated timezone data for your locale, see Timezone Data Versions in the JRE Software. However, if you are unable to use Oracle's latest JDK or JRE update release or if the timezone data on the latest release is not the most current one available, the TZUpdater tool provides a means of updating timezone data while leaving other system configuration and dependencies unchanged.

それは(セクションその他のリソース下)official Java SE download site上でダウンロードできます。あなたの特定のケースについて

情報は、(あなたも情報がJREのリリースでは利用できないことを見ることができます)here見つけることができます:

Turkey switched from EET/EEST (+02/+03) to permanent +03, effective 2016-09-07. New leap second 2016-12-31 23:59:60 UTC as per IERS Bulletin C 52.

doucentationに説明されているどのようなツールを使用するには:

例えば

The TZUpdater tool modifies the JDK/JRE software instance that is used to execute the tool. A single image of the JDK/JRE software is modified per execution. To administer the tool to multiple instances of the JDK/JRE software, see the section Systemwide Usage.

、以下のコマンドは、トルコの夏時間の変更が含まれるべき最新の情報とJREを更新します。

java -jar tzupdater.jar -l http://www.iana.org/time-zones/repository/tzdata-latest.tar.gz


現在known issue since the 2016g releaseがあることに注意してください:

Due to formatting changes in the IANA-maintained tzdata bundle, the TZUpdater tool fails to determine the tzdata version when parsing the tzdata2016.tar.gz resource bundle.

は、IANAから最新のtzdataのバンドルを使用することができるようにするために、下記のリンクから手順に従ってください。これが修正されると、このセクションの回答は削除されます。

+0

私たちの春のブートドッカーアプリケーションはLinuxマシン上にあります。七面鳥が再び昼光を使用し始めたら、我々は再びダウンロードするか、コマンドラインだけで十分ですか? – mark

+2

私があなたに与えたコマンド例は、そこに公開されている限り、ianaからの最新の情報を使用するので、そのコマンドはすべきです。 – Magnilex

+1

タイムゾーンアップデータを使用します。通常、マイナーなJDKアップデートでは、タイムゾーンのデータは更新されません。これは、一部のアプリケーションの動作が変更され、予期しないバグが発生する可能性があるからです。 –

2

Answer by Magnilexは正しいので、受け入れてください。トルコの時間に関係する人は、すぐにJavaにバンドルされたtzデータベースを更新する必要があります。

tzdata2016gthe time zone data filesには、必要なトルコの変更があります。

とバージョンtzdata2016h 1980年代と1990年代にトルコのためのいくつかの修正を持っています。

In Turkey, transitions in 1986-1990 were at 01:00 standard time not at 02:00, and the spring 1994 transition was on March 20, not March 27.

しかし、現在のJava SE 8のアップデート111 & 112は、以前のバージョンtzdata2016fを持っています。

tz更新111のJava 8のように更新されない

以下の私の実験では、トルコの政府の時間帯で、この土壇場での変更は Javaへの最新の更新にバンドルtz databaseに含まれていませんでした示しOracle、Java 8 Update 111から。

DSTは以前終了予定でした。次に、クロックがジャンプするかどうかを確認するために一度に1時間を追加します。

System.out.println ("java.version: " + System.getProperty ("java.version")); 

ZoneId z = ZoneId.of ("Europe/Istanbul"); 
ZonedDateTime zdt = ZonedDateTime.of (2016 , 10 , 30 , 0 , 0 , 0 , 0 , z); 

System.out.println (" zdt: " + zdt); 
System.out.println ("zdt + 1: " + zdt.plusHours (1)); 
System.out.println ("zdt + 2: " + zdt.plusHours (2)); 
System.out.println ("zdt + 3: " + zdt.plusHours (3)); 
System.out.println ("zdt + 4: " + zdt.plusHours (4)); 
System.out.println ("zdt + 5: " + zdt.plusHours (5)); 
System.out.println ("zdt + 6: " + zdt.plusHours (6)); 

実行時。午前4時には、時計は03時を繰り返すようにジャンプします。これはDSTが終了したことを意味しましたが、新しいトルコの法律が最新のものであるかどうかは判断できません。

java.version: 1.8.0_111 
    zdt: 2016-10-30T00:00+03:00[Europe/Istanbul] 
zdt + 1: 2016-10-30T01:00+03:00[Europe/Istanbul] 
zdt + 2: 2016-10-30T02:00+03:00[Europe/Istanbul] 
zdt + 3: 2016-10-30T03:00+03:00[Europe/Istanbul] 
zdt + 4: 2016-10-30T03:00+02:00[Europe/Istanbul] 
zdt + 5: 2016-10-30T04:00+02:00[Europe/Istanbul] 
zdt + 6: 2016-10-30T05:00+02:00[Europe/Istanbul] 
+0

ですが、ここには変更があります。http://www.oracle.com/technetwork/java/javase/tzdata-versions-138805.html look tzdata2016gください。しかし、私はそれを使用することができません – mark

+1

@マークあなたはそのページを誤解しました。 'tzdata2016g'と' tzdata2016h' ...空の2番目の列を見てください。 tzデータへのこれらの更新は、Java **のどのバージョンでもまだ出荷されていません。 [Magnilexによる回答](http://stackoverflow.com/a/40401351/642706)に記載されているように、* TZUpdater *ツールを使用してJVMにこのようなアップデートを適用する必要があります。今日(2016-11-03)現在、Java SEの最新バージョンはJava 8 Update 111(&112)で、リンク先ページの3行目に表示されている 'tzdata2016f'を含んでいます。政治家はオラクルらに比べて時間帯が速い。新しいバージョンのJavaを出荷できます。 –

+0

最後に質問してください。 tzdata2016gでは列が空になりました。彼らがそれをリリースするとき、私は再び変わるべきですか? – mark

関連する問題