2016-10-10 1 views
2

私はユーザーがドロップダウンリストからタイムゾーンを選択する設定を実装しています。そして、自分のタイムゾーンで現在時刻をmoment-timezone.jsを使って選択したタイムゾーンに表示します。Javaはmoment-timezone.jsでタイムゾーンリストを同期させます

私はTimeZone.getAvailableIDs()を使用して、サーバ側からタイムゾーンのリストを取得してドロップダウンを作成しています。しかし、moment-timezone.jsは、リストからいくつかのタイムゾーンIDを解析できません。リストのサイズを確認し、moment-timezone.jsのmoment.tz.names()と比較したところ、moment-timezone.jsのリストには、Javaのリストより約30少ないIDが含まれていました。私はそれがタイムゾーンのバージョンと関係があるかもしれないと思うが、私はJava 7を使用しているので、私は確信していない。ZoneInfoMappingsにあるバージョンは2014bであるのに対し、私はmoment-timezone.jsのデータファイルは2016f。

Javaとmoment-timezone.jsを同期させるために、同じリストからデータを取得する方法はありますか?私はJava 7に限定されており、Java 8からTimeを使用することはできません。ネイティブJavaライブラリを使用して、Joda Timeを検討していません。

+0

こんにちは@lukforce、あなたの質問を改善するために、より良い回答につながるようにあなたが試みたコードを投稿するべきです。 – David

答えて

0

いくつかのこと:

  • は、Javaおよびモーメント - タイムゾーンの両方が同じソースデータ、IANAからtz databaseを使用しています。このデータの改訂版が1年に何回もリリースされるため、更新されたままで、両面で同じバージョンを使用するようにしてください。

  • TZUpdater utilityを使用して、Javaのタイムゾーンデータを更新します。

  • 追加の TZDB識別子ではないレガシー目的のために、Javaによって3文字の識別子がサポートされていることに注意してください。 the JavaDoc on TimeZoneから:

    3文字のタイムゾーンのID JDK 1.1.xとの互換性のために

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

    hereのより完全なリストがあります。そのうちのいくつかはTZDBエイリアスであり、一部はJavaのみで存在します。

    Javaレガシー識別子をmoment-timezoneに追加する場合は、add them as linksとするとリストが両側で同じに見えます。例:

    moment.tz.link('Asia/Shanghai|CTT'); 
    

    ただし、最初にサーバー側で非標準の識別子を許可しない方がよい場合があります。

+0

ええ、私は瞬間から欠けているものがあなたが言及したように3文字のものであることに気づいた。それらを許可しないことによって、両方のリストを一致させるためにサーバサイドのJavaでそれらを削除する唯一の方法であることを意味しますか? – lukforce

+0

いいですね。私は 'getAvailableIDs'から返されたリストを受け取り、それをフィルタリングします。 –

+0

これは私が今行ったことですが、私はまだこれを行うことなく2つの一致するリストを持つことができる解決策を望んでいました。この適度に長いリストからエントリを複数回削除することは、パフォーマンスが賢明に見えません。 – lukforce

0

リストのサイズは、2年ごとに書かれた2つのリストを効果的に比較する場合とは異なります。

あなたはJavaは/も、あなたはJavaScriptで何を得る更新するために非常に最新(2016グラム)のタイムゾーンのリストをソースにしたい場合は、ここでそれらを得ることができhttps://www.iana.org/time-zones

あなたは古いため、サイトに記載されているURLを変更することができます

バージョン(2016f)が必要な場合は、

必要なデータファイルを取得したら、アプリケーションにロードしてください。

ここでは、http://www.oracle.com/technetwork/java/javase/tzdata-versions-138805.html のいずれかのJDK 6/7/8を使用しています。バージョン2016dに限定されます。

+0

新しいバージョンのtzデータをアプリケーションにロードするにはどうすればよいですか?コンパイルに使用しているJavaでtzupdaterを使用するのですか、またはアプリケーション・サーバー(ここではWebLogic)用にtzupdaterを更新しますか? – lukforce

+0

Javaリスト(コンパイラとアプリケーションサーバの両方)を更新するためにtzupdaterを使用しましたが、今度はリストが588ですが、以前は629でした(620)でした。バージョンを確認したところ2016fでした私の瞬間 - 時間帯データファイルで見つけたバージョンと一致しています。リストを同期する別の方法はありますか? – lukforce

関連する問題