tl; dr
LocalDate.now().format(
DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM )
.withLocale( new Locale( "no" , "NO" ) )
)
の厄介なクラスjava.util.Date
とSimpleDateFormat
は現在レガシーであり、java.timeクラスに取って代わられています。
LocalDate
このLocalDate
クラスは、時刻やタイムゾーンのない日付のみの値を表します。
日付を決定するには、タイムゾーンが重要です。いつでも、日付はゾーンごとに世界中で異なります。たとえば、パリの真夜中から数分後のフランスは、モントリオールケベックではまだ「昨日」であるのに新しい日です。
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
DateTimeFormatter
DateTimeFormatter
日付部分または時間部分のみを表す文字列を生成するために使用します。
DateTimeFormatter
クラスが自動的にできるローカライズ。
ローカライズするには、以下を指定します。
FormatStyle
文字列の長さまたは省略形を決定します。
Locale
(a)曜日の名前、月の名前などを翻訳するための人間の言語、および(b)略語、大文字、句読点などの問題を決定する文化的規範を決定するため。
例:
Locale l = Locale.CANADA_FRENCH ;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL ).withLocale( l );
String output = ld.format( f );
反対方向に進むと、ローカライズされた文字列を解析できます。
LocalDate ld = LocalDate.parse( input , f );
ロケールとタイムゾーンは完全に直交する問題であることに注意してください。モントリオールの瞬間を日本語で、またはオークランドのニュージーランドの瞬間をヒンディー語で表現することができます。
別の例:(6 junio 2012
スペイン語)を2012-06-06
(標準ISO 8601形式)に変更します。java.timeクラスは、文字列の解析/生成にデフォルトでISO8601形式を使用します。
String input = "6 junio 2012";
Locale l = new Locale ( "es" , "ES" );
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "d MMMM uuuu" , l );
LocalDate ld = LocalDate.parse ( input , f );
String output = ld.toString();
フォーマットを熟読する
これは、自動的にローカライズされた、複数のロケールでの複数の形式の結果を熟読するためのコード例です。
ANはEnumSet
実装されSet
、非常に低いメモリ使用量と速い実行速度収集の両方に最適化され、Enum
オブジェクトを。したがって、ループするEnumSet.allOf( FormatStyle.class )
4つのFormatStyle
列挙型オブジェクトすべてのコレクションを提供します。詳細は、列挙型に関するOracleチュートリアルを参照してください。
LocalDate ld = LocalDate.of( 2018 , Month.JANUARY , 23 );
List < Locale > locales = new ArrayList <>( 3 );
locales.add( Locale.CANADA_FRENCH );
locales.add( new Locale( "no" , "NO" ) );
locales.add( Locale.US );
for ( Locale locale : locales )
{
System.out.println( "------| LOCALE: " + locale + " — " + locale.getDisplayName() + " |----------------------------------" + System.lineSeparator() );
for ( FormatStyle style : EnumSet.allOf( FormatStyle.class ) )
{
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( style ).withLocale( locale );
String output = ld.format( f );
System.out.println( output );
}
System.out.println( "" );
}
System.out.println( "« fin »" + System.lineSeparator() );
出力。
------| LOCALE: fr_CA — French (Canada) |----------------------------------
mardi 23 janvier 2018
23 janvier 2018
23 janv. 2018
18-01-23
------| LOCALE: no_NO — Norwegian (Norway) |----------------------------------
tirsdag 23. januar 2018
23. januar 2018
23. jan. 2018
23.01.2018
------| LOCALE: en_US — English (United States) |----------------------------------
Tuesday, January 23, 2018
January 23, 2018
Jan 23, 2018
1/23/18
« fin »
java.timeについて
java.timeフレームワークは、Java8以降に組み込まれています。これらのクラスは面倒古い取って代わるレガシーのような日付時刻クラスをjava.util.Date
、Calendar
、& SimpleDateFormat
。
ジョダタイムプロジェクトは、今でメンテナンスモードへの移行をアドバイスjava.timeのクラス。
詳細については、Oracleチュートリアルを参照してください。そして、StackOverflowで多くの例と説明を検索してください。仕様はJSR310です。
java.timeオブジェクトをデータベースと直接交換できます。JDBC4.2以降に準拠したJDBCドライバーを使用してください。文字列もクラスも必要ありません。java.sql.*
java.timeクラスはどこで入手できますか?
ThreeTen-エクストラプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeに将来追加される可能性のある試験場です。あなたはここにいくつかの有用なクラスのような見つけることがInterval
、YearWeek
、YearQuarter
、および多くを。
java.util.Date
、java.util.Calendar
とjava.text.SimpleDateFormat
今のレガシーに取って代わられ、java.timeのJavaの8&9のJavaを参照してくださいに組み込まれたクラスのチュートリアルOracleで。