BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

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
 
 

この記事に星をつける

おすすめ度
スタイル

BT