BT

InfoQ ホームページ ニュース Java 9における日時フォーマットはユニコードロケール標準に近づく

Java 9における日時フォーマットはユニコードロケール標準に近づく

ブックマーク

原文(投稿日:2017/02/14)へのリンク

多くの解析とフォーマットへの変更がJava 9に取り入れられている。これは機能をユニコードロケールデータマークアップ言語 (LDML)に近づけるためだ。変更はStephen Colebourne氏に監督されている。氏は有名な日時ライブラリであるJodaTimeの作成者で、Java 8での新しいjava.timeコンポーネントの先駆者だ。ユニコード標準を遵守することはJava以外の他のシステムとのよりよい相互運用性を提供するだろう。

LDMLはユニコード共通ロケールデータリポジトリ (CLDR)で使用される言語である。これはユニコードコンソーシアムのプロジェクトである。世界の異なる地域からロケールデータを集め保存するためのものだ。こうすることでアプリケーション開発者はプログラムを異なる文化により適応させられる。数ある中で、LDMLは日付、時間、タイムゾーン、とくに日付のフォーマットと解析を処理する。以下はJava 9での新機能の抜粋だ。java.timeはLDML仕様により近づく。

  • JDK-8148947はDateTimeFormatterパターンの文字‘g’について。文字‘g’は、LDMLで述べられていることとして“修正ユリウス日”を示す。これは通常のユリウス日と次の意味で異なる。a) これはGMTよりもローカル時間に依存する。b) これは正午ではなく夜の12時で日付の境界を定める。
  • JDK-8155823は日時パターンに'v' と'vvvv’追加する。‘v’と‘vvvv’はLDMLフォーマットである。これらは“位置を指定しない一般的なフォーマット”を示す。たとえば“太平洋標準時”は、“ロサンゼルス時間”のような都市を指定した“位置を指定した一般的なフォーマット”と反している。
  • JDK-8148949はDateTimeFormatterパターンに文字‘A’、’n’、’N’を追加する。LDMLはフォーマット’n’と’N’を指定せず‘A’を指定しているが、Javaでの現行の振る舞いはこの仕様に合っていない。‘A’は次のことを表すことになっている。1日での経過したミリ秒の値だ。これは可変の幅を持っているが、現在Javaはこれを固定の幅で扱う。もし‘AA’がパターンとして指定されれば、1日での99ミリ秒より進んだどんな値の解析にも失敗する。’n’と’N’はそれぞれ秒におけるナノ秒と1日におけるナノ秒を表す標準へのただのJavaの拡張である。
  • JDK-8079628は"DD"を含むjava.time DateTimeFormatterが3桁の1年における経過日の値の解析で失敗するということだ。上述の問題と似ているが、‘D’は1年における経過日を表す。もしパターンとして“DD”を指定すれば、1年における123番目の日“123”の解析に失敗する。

すでに言及したように、LDMLでのよりよい調整はシステム間の相互運用を簡単にするだろう。LDMLをある程度採用している複数の技術があるからだ。少し挙げると、マイクロソフトの.NETはロケールデータの一般的な中継にLDMLを使うし、Node.jsとRubyで利用できるパッケージがある。

 
 

Rate this Article

Relevance
Style
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT

あなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。

Eメールを変更すると確認のメールが配信されます。

会社名:
役職:
組織規模:
国:
都道府県:
新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。