Lambdaの表現、ストリーム、いくつかのマイナーな改善に加えて、Java 8は、このチュートリアルの新しいセットも導入しました。 Javaの日付、カレンダー、および時間の処理は常に批判されてきました。特に、java.util.dateを変更可能であると定義し、SimpledateFormatを非Thread-Safeとして実装するという決定が常に批判されてきました。 Javaは、日付と日付の機能をより適切にサポートする必要があることに気付いたようです。これは、Jodaの時間と日付ライブラリの使用に慣れているコミュニティにとっても良いことです。この新しい時間と日付のライブラリの最大の利点は、インスタント時間(インスタント)、期間(期間)、日付(日付)、時刻(時間)、タイムゾーンなど、時間と日付に関連するいくつかの概念を明確に定義することです。 -Zone)および期間(期間)。また、人間と機械の間の時間と日付の理解を区別するなど、ジョーダライブラリの利点のいくつかにも基づいています。 Java 8は依然としてISOのカレンダーシステムを使用しており、その前身とは異なり、Java.timeパッケージのクラスは不変でスレッドセーフです。新しい時間と日付のAPIは、Java.timeパッケージにあります。
1.Instant-ITはタイムスタンプを表します
2。ローカルデート - 2014-01-14などの特定の時間を含まない日付。誕生日、記念日、導入日などを保存するために使用できます。
3.LocalTime-日付のない時間を表します
4.LocalDateTime-ITには日付と時刻が含まれていますが、オフセット情報やタイムゾーンはまだありません。
5.ZonedDateTime-これはタイムゾーンを含む完全な日付と時刻であり、オフセットはUTC/グリニッジ時間に基づいています。
新しいライブラリには、ZoneOffsetとZonedも追加されており、タイムゾーンをより適切にサポートできます。新しいDateTimeFormatterでは、日付の解析とフォーマットも新しいものになりました。この記事に言及するだけで、Javaが昨年この時期にこの新しい機能を立ち上げようとしていたときにこの記事を書きました。そのため、例の時間は昨年の時間であることがわかります。これらの例を実行した場合、それらが返す値は間違いなく正しいです。
Java 8は日時と日付をどのように処理しますか
誰かが私に新しいライブラリを学ぶための最良の方法は何ですか?私の答えは、実際のプロジェクトでそれを使用することです。実際のプロジェクトにはさまざまなニーズがあり、開発者がこの新しいライブラリを探索して調査するように促します。要するに、タスク自体だけがあなたが探求して学ぶことを本当に奨励するでしょう。 Java 8の新しい日付と時刻APIについても同じことが言えます。 Java 8のこの新しいライブラリを学ぶために、ここで20のタスク指向の例を作成しました。 Java 8時刻と日付ライブラリを使用して今日表現する方法など、簡単なタスクから始めましょう。その後、時間とタイムゾーンで完全な日付をさらに生成し、開発などのより実用的なタスクを完了する方法を研究する方法を研究しましょう。誕生日、日曜日の記念日、次の請求日、次のプレミアムデー、クレジットカードの有効期限など、特定の日付の前に何日かを調べるためのリマインダーアプリケーション。
例1 Java8でその日の日付を取得する方法
Java 8にはLocaldateと呼ばれるクラスがあり、今日の日付を表すために使用できます。このクラスは、Java.util.dateとはわずかに異なります。これには日付と時間がないためです。したがって、時間を含めずに日付を表す必要がある場合は、それを使用できます。
コードコピーは次のとおりです。
LocalDate Today = localdate.now();
出力
今日の地元の日付:2014-01-14
時間情報なしで今日の日付を作成することがわかります。また、日付をフォーマットしてから、前の日付クラスとは異なり、出力されます。
例2今年、月、Java 8の日を取得する方法8
LocalDateクラスは、年、月、日、その他の日付属性を抽出するためのいくつかの便利な方法を提供します。これらの方法を使用して、java.util.calendarなどのクラスを使用せずに、必要な日付属性を取得できます。
コードコピーは次のとおりです。
LocalDate Today = localdate.now();
int year = today.getyear();
int month = today.getMonthValue();
int day = today.getDayofmonth();
System.out.printf( "year:%d month:%d day:%d /t%n"、year、month、day);
出力
今日の地元の日付:2014-01-14
年:2014か月:1日:14
ご覧のとおり、Java 8で年および月の情報を取得するのは非常に簡単です。メモリなしで、対応するGetterメソッドを使用してください。非常に直感的です。 Javaで今年、月、日を取得する古い執筆方法と比較できます。
例3 Java 8で特定の日付を取得する方法
最初の例では、静的メソッドを介して日付を生成するのは非常に簡単であることがわかりますが、別の非常に有用な工場メソッドlocaldate.of()を使用して、パラメーターを受け入れる日付を作成できます。年、月、日の年、その後、同等のローカルデートインスタンスを返します。この方法については、以前のAPIで間違いを犯さなかったという別の良いニュースがあります。ここで日付について書くものは何でも、たとえば、以下の例では、1月14日を表し、隠されたロジックはありません。
コードコピーは次のとおりです。
localdate dateofbirth = localdate.of(2010、01、14);
System.out.println( "生年月日は:" + dateofbirth);
出力:生年月日は2010-01-14です
2014年1月14日、作成の日付が私たちが書いたものであることがわかります。
例4 Java 8で2つの日付が等しいかどうかを確認する方法
実際に処理時間と日付の実際のタスクについて話す場合、1つの一般的なことは、2つの日付が等しいかどうかを確認することです。今日、誕生日、記念日、休日など、今日が特別な日であるかどうかについての質問に遭遇することがよくあります。時々、たとえば休日など、特定の日かどうかを確認する日付が与えられます。次の例では、Java 8でこのタイプのタスクを完了するのに役立ちます。ご想像のとおり、LocalDateは次のように日付を比較するために等しい方法をオーバーライドします。
コードコピーは次のとおりです。
localdate date1 = localdate.of(2014、01、14);
System.out.printf( "Today%sおよびdate1%sは同じ日付%n"、今日、日付1);
}
出力
今日2014-01-14とDate1 2014-01-14は同じ日付です
この場合、比較する2つの日付は等しいです。同時に、コードでフォーマットされた日付文字列を取得した場合、比較する前に日付に解析する必要があります。この例を、Javaが以前の日付を比較する方法と比較することができ、とてもエキサイティングであることがわかります。
例5 Java 8の重複イベントをチェックする方法、誕生日など
Javaの日時に関連する別の実用的なタスクがあります。これは、毎月の請求日、結婚記念日、毎月の返済日、毎年保険料を支払う日など、重複したイベントを確認することです。 eコマース会社で働いている場合、クリスマス、感謝祭、インドなど、すべての重要な休日にユーザーに誕生日の願いを送り、挨拶を送るモジュールが間違いなくあります。フェスティバル。 Javaでのフェスティバルか重複イベントなのかを判断する方法は?毎月のクラスを使用します。このクラスは月と日で構成されており、年間情報が含まれていません。つまり、毎年繰り返し表示される日を表すために使用することができます。もちろん、年月クラスなど、他にも組み合わせがあります。また、新しい時刻と日付ライブラリの他のクラスのように不変でスレッドセーフであり、バリュークラスでもあります。例を使用して、毎月使用して重複日を確認する方法を確認しましょう。
コードコピーは次のとおりです。
localdate dateofbirth = localdate.of(2010、01、14);
月の誕生日=月day.of(dateofbirth.getmonth()、dateofbirth.getdayofmonth());
月のcurrentmonthday = monthday.from(Today);
if(currentmonthday.equals(誕生日)){
System.out.println( "その日の多くの幸せなリターン!!");
}それ以外{
System.out.println(「ごめんなさい、今日はあなたの誕生日ではありません」);
}
出力:その日の多くの幸せなリターン!!
年は異なりますが、今日は誕生日なので、生産物に誕生日の願いがあります。システムの時間を調整して、次の誕生日が次の誕生日でジュニット単位テストを書くことを試みて、コードを正しく実行できるかどうかを確認することができます。
例6 Java 8で現在の時間を取得する方法
これは、最初の例で現在の日付を取得することに非常に似ています。今回は、LocalTimeというクラスを使用しています。これは、日付のない時間であり、LocalDateに相対的な時間です。ここでは、今すぐ静的工場法を使用して現在の時間を取得することもできます。デフォルトの形式はHH:MM:SS:NNNで、NNNはNANOCONDSです。以前にJava 8で現在の時間を取得する方法と比較できます。
コードコピーは次のとおりです。
localtime = localtime.now(); out.println( "local time:" + time);
出力
現在の現地時間:16:33:33.369 //時間、数分、秒、ナノ秒
ご覧のとおり、現在の時間には日付が含まれていません。LocalTimeには時間と日付がないためです。
例7時間の時間数を増やす方法
多くの場合、将来の時間を計算するために時間、数分、または秒を追加する必要があります。 Java 8は、不変のスレッドセーフクラスを提供するだけでなく、元のadd()メソッドを置き換えるためにPlushours()などのより便利な方法も提供します。ちなみに、これらの方法は、Localtimeが不変であるため、新しいLocalTimeインスタンスへの参照を返します。この新しいリファレンスを保存することを忘れないでください。
コードコピーは次のとおりです。
localtime time = localtime.now();
localtime newtime = time.plushours(2);
System.out.println( "2時間後の時間:" + newTime);
出力:
2時間後の時間:18:33:33.369
2時間後、現在の時間は16:33:33.369であることがわかります。これで、Javaの時間を追加または短縮する古い方法と比較できます。一見すると、どの方法が優れているかを知ることができます。
例8 1週間後に日付を取得する方法
これは、2時間後に時間を取得する前の例に似ています。ここでは、1週間後に日付を取得する方法を学びます。 LocalDateは、日、週、または月を追加するために使用できるPlus()メソッドを備えた日付を表すために使用されます。 LocalDateも不変であるため、変更操作は新しいインスタンスを返しますので、保存することを忘れないでください。
コードコピーは次のとおりです。
localdate nextweek = today.plus(1、chronounit.weeks);
system.out.println( "今日は:" + today);
system.out.println( "1週間後の日付:" + nextweek);
出力:
今日は2014-01-14です
1週間後の日付:2014-01-21
日付が7日間、つまり1週間で何であるかを見ることができます。この方法を使用して、1か月、年、時間、分、10年を追加して、Java APIのChronounitクラスをチェックして、より多くのオプションを取得できます。
例9日付約1年
これは、前の例の続編です。上記の例では、LocalDateのPlus()メソッドを使用して、1年前の日を使用する方法を学びましょう。
コードコピーは次のとおりです。
localdate前iear = Today.minus(1、chronounit.years);
System.out.println( "1年前の日付:" +前iEar);
localdate nextyear = today.plus(1、years);
System.out.println( "1年後の日付:" + nextyear);
出力:
1年前の日付:2013-01-14
1年後の日付:2015-01-14
2013年には1つ、2015年には2年、2014年頃に2年があることがわかります。
例10 Java 8で時計を使用しています
Java 8には時計クラスが付属しており、特定のタイムゾーンで現在のインスタント時間、日付、または時刻を取得するために使用できます。 system.currenttimeinmillis()およびtimezone.getDefault()メソッドの代わりにクロックを使用できます。
コードコピーは次のとおりです。
//システムクロックに基づいて現在の時間を返し、UTCに設定します。
clock clock = clock.systemutc();
System.out.println( "clock:" + clock);
//システムクロックゾーンクロックに基づいて時間を返しますdefaultclock =
clock.systemdefaultzone();
System.out.println( "clock:" + clock);
出力:
時計:SystemCrock [Z]
時計:SystemCrock [Z]
このクロックを指定された日付と比較できます。
コードコピーは次のとおりです。
パブリッククラスmyclass {
プライベートクロッククロック; //依存関係...
public void Process(localdate eventdate){
if(eventdate.isbefore(localdate.now(clock)){
...
}
}
}
これは、異なるタイムゾーンで日付を処理する必要がある場合に非常に便利です。
例11日付がJavaの別の日付の前か後にあるかを判断する方法
これは、実際のプロジェクトでも一般的なタスクです。日付が別の日付の前か後にあるのか、それとも正確に等しいかをどのように見ますか? Java 8では、LocalDateクラスには、2つの日付を比較するために使用できるISBEBER()およびISAFTER()メソッドがあります。メソッドを呼び出す日付が指定された日付よりも早い場合、ISBEFORE()メソッドはtrueを返します。
コードコピーは次のとおりです。
localdate明日= localdate.of(2014、1、15);
System.out.println( "明日は今日後に来ます");
}
昨日localdate = Today.minus(1、日);
if(昨日。isbefore(今日)){
system.out.println( "昨日は今日の日です");
}
出力:
明日は今日の後に来ます
昨日は今日の前日です
Java 8の日付は非常に簡単であることがわかります。カレンダーのような別のクラスを使用して、同様のタスクを完了する必要はありません。
例12 Javaの異なるタイムゾーンの処理8
Java 8は日付と時間を分離するだけでなく、タイムゾーンもあります。現在、タイムゾーン関連のクラスのセットがあります。たとえば、Zonidは特定のタイムゾーンを表しますが、ZonedDateTimeはタイムゾーンの時間を表します。 Java 8の前のグレゴリアンカレンダークラスに相当します。このクラスを使用して、次の例など、現地時間を別のタイムゾーンの対応する時間に変換できます。
コードコピーは次のとおりです。
// Javaのタイムゾーンの日付と時刻8 Zoneid America = Zoneid.of( "America/new_york");
localdateTime localtdateandtime = localdateTime.now();
zoneddatime dateandtimeinnewyork = zoneddatetime.of(localtdateandtime、アメリカ);
System.out.println( "特定のタイムゾーンの現在の日付と時刻:" + dateandtimeinnewyork);
出力:
特定のタイムゾーンの現在の日付と時刻:2014-01-14T16:33:33.373-05:00 [America/New_York]
現地時間をGMT時間に変換する以前の方法と比較できます。ちなみに、Java 8の前と同じように、タイムゾーンに対応するテキストを間違えないでください。そうしないと、そのような例外に遭遇します。
コードコピーは次のとおりです。
スレッド「Main」Java.Time.Zone.ZonerulESEXCEPTION:不明なタイムゾーンID:アジア/東京の例外
Java.time.zone.zonerulesprovider.getProvider(zonerulesprovider.java:272)
java.time.zone.zonerulesprovider.getrules(zonerulesprovider.java:227)
java.time.zoneregion.ofid(zoneregion.java:120)
Java.time.zoneid.of(Zoneid.java:403)
Java.time.zoneid.of(Zoneid.java:351)
例13クレジットカードの有効期限など、固定日を表す方法
毎月の日が繰り返される日を表すように、年月は別の組み合わせであり、クレジットカードの返済日、定期預金の満期日、オプションの満期日などの日付を表します。このクラスを使用して、その月に何日かを確認できます。
コードコピーは次のとおりです。
yearmonth currentyearmonth = yearmonth.now();
yearmonth creditcardexpiry = yearmonth.of(2018、month.february);
System.out.printf( "クレジットカードは%n"で期限切れになります。
出力:
2014-01:31:31
クレジットカードは2018-02に期限切れになります
例14 Java 8で跳躍年を確認する方法
これは複雑ではありません。ローカルデートクラスには、現在のローカルデートに対応する年が跳躍年であるかどうかを返すことができます。それでもホイールを再現したい場合は、このコードを見ることができます。
コードコピーは次のとおりです。
if(today.isleapyear()){
System.out.println( "今年は跳躍年です");
}それ以外 {
System.out.println( "2014は跳躍年ではありません");
}
出力:2014年は跳躍年ではありません
結果が正しいかどうかを確認するために、さらに数年間確認できます。
例15 2つの日付の間に何日か月と月が含まれていますか
別の一般的なタスクは、2つの指定された日付の間に何日、週、または年が含まれるかを計算することです。 java.time.periodクラスを使用して、この関数を完了できます。次の例では、現在の日付が将来の日付から分離されている数ヶ月を計算します。
コードコピーは次のとおりです。
localdate java8release = localdate.of(2014、month.march、14);
期間tonetonextjavarelease =
期間(今日、Java8Release);
System.out.println( "今日からJava 8リリースの間に残っている月:" + feistonextjavareease.getmonths());
出力:
今日からJava 8リリースの間に残った月:2
ご覧のとおり、今月は1月であり、Java 8のリリース日は3月であるため、2か月があります。
例16タイムゾーンオフセット付きの日付と時刻
Java 8では、インドはGMTまたはUTC5:30などの特定のタイムゾーンを表すゾーンオフセットクラスを使用して、対応するタイムゾーンを取得するために静的メソッドゾーンオフセット()メソッドを使用できます。このオフセットを取得している限り、LocalDateTimeとこのオフセットを使用してOffsetDateTimeを作成できます。
コードコピーは次のとおりです。
LocalDateTime DateTime = localDateTime.of(2014、Month.January、14、19、30);
ZONEOFFSET OFFSET = ZONEOFFSET.OF( "+05:30");
offsetDateTime date = offsetDateTime.of(datetime、offset);
system.out.println( "Javaのタイムゾーンオフセット付きの日付と時刻:" + date);
出力:
Javaのタイムゾーンオフセット付き日付と時刻:2014-01-14T19:30+05:30
現在の時間と日付はタイムゾーンに関連していることがわかります。もう1つの点は、OffsetDatimeは主にマシンが理解できる場合は、ZonedateTimeクラスを使用できることです。
例17 Java 8で現在のタイムスタンプを取得する方法
Java 8の前に現在のタイムスタンプを取得する方法をまだ覚えているなら、それは今のケーキです。インスタントクラスには、次のように現在のタイムスタンプを返すことができる静的な工場メソッドがあります()。
コードコピーは次のとおりです。
インスタントタイムスタンプ= instant.now();
System.out.println( "このインスタントの価値は何ですか" +タイムスタンプ);
出力:
このインスタント2014-01-14T08:33:33.379zの価値は何ですか
現在のタイムスタンプには、Java.util.dateに非常に似ている日時が含まれています。インスタントはJava 8の前の日付です。これら2つのクラスのメソッドを使用して、これらの2つのタイプを使用できます。たとえば、日付(instant)からそれらの間を変換するには、instantをjava.util.dateに変換し、日付をインスタントに変換します。
例18 Java 8で事前定義されたフォーマッタを使用して解析/フォーマット日付
Java 8の前に、時間と日付のフォーマットは技術的な仕事でした。スレッドローカル変数のおかげで、これによりマルチスレッド環境で実行可能になりますが、Javaはこの状態を長い間維持してきました。今回は、まったく新しいスレッドセーフの日付と時刻のフォーマッタを紹介します。また、一般的に使用される日付形式を含む、いくつかの事前定義されたフォーマッタが付属しています。たとえば、この例では、2014年2月14日に20140114にフォーマットする定義済みのBasiciSodate形式を使用します。
コードコピーは次のとおりです。
文字列dayaftertommorrow = "20140116";
localdate formatted = localdate.parse(dayaftertommorrow、
DateTimeFormatter.Basic_iso_date);
system.out.printf( "string%sから生成された日付は%s%n"、dayaftertommorrow、フォーマット);
出力:
文字列20140116から生成された日付は2014-01-16です
生成された日付は、指定された文字列の値と一致することがわかります。つまり、日付形式はわずかに異なります。
例19カスタムフォーマッタを使用してJavaの日付を解析する方法
上記の例では、組み込みの時間日付のフォーマッタを使用して、日付文字列を解析しました。もちろん、事前に定義されたフォーマッタは確かに優れていますが、現時点ではカスタム日付のインスタンスを作成する必要がある場合があります。次の例の日付形式は「MMM DD YYYY」です。任意のパターンをDateTimeFormatterのOfPattern Static Method()に渡すことができます。これは、このパターンのリテラル値が前の例と同じであるため、インスタンスを返します。たとえば、Mはまだ月を表しますが、Mはまだセグメントです。無効なモードでは、DateTimeParseExceptionの例外がスローされますが、Mを使用する時期にMを使用するなど、論理的なエラーである場合、何もすることはありません。
コードコピーは次のとおりです。
文字列goodfriday = "2014年4月18日";
試す {
DateTimeFormatter formatter = dateTimeFormatter.ofpattern( "mmm dd yyyy");
LocalDate Holiday = localdate.parse(goodfriday、formatter);
System.out.printf( "Stursed String%S、日付は%S%n"、Goodfriday、Holiday);
} catch(datetimeparseexception ex){
System.out.printf( "%sは解析できません!%n"、goodfriday);
ex.printstacktrace();
}
出力:
2014年4月18日に解析された文字列、日付は2014-04-18です
日付の値は、渡された文字列と一致していることがわかりますが、形式は異なります。
例20日付をフォーマットしてjava 8の文字列に変換する方法
前の2つの例では、DateTimeFormatterクラスを使用しましたが、主に日付文字列を解析します。この例では、反対を行います。ここには、LocalDateTimeクラスのインスタンスがあり、フォーマットされた日付文字列に変換したいと考えています。これは、日付をJavaの文字列に変換するための最も簡単で最も便利な方法です。次の例では、フォーマットされた文字列を返します。前の例と同じことは、指定されたパターン文字列を使用してDateTimeFormatterクラスのインスタンスを作成する必要があることですが、呼び出しはLocalDateクラスの解析方法ではなく、その形式()メソッドです。この方法は、現在の日付を表す文字列を返し、対応するパターンは着信DateTimeFormatterインスタンスで定義されます。
コードコピーは次のとおりです。
localdateTime artiondate = localdateTime.now();
試す {
DateTimeFormatter Format = DateTimeFormatter.ofPattern( "MMM DD YYYY HH:MM A");
文字列ランディング= arvenydate.format(format);
System.out.printf( "到着:%s%n"、着陸);
} catch(datetimeexception ex){
System.out.printf( "%sはフォーマットできません!%n"、到着);
ex.printstacktrace();
}
出力:到着:2014年1月14日04:33 PM
現在の時刻は、与えられた「MMM DD YYYY HH:MM A」パターンで表されることがわかります。
Java8の日付と時刻APIのいくつかの重要なポイント
これらの例を読んだ後、Java 8の新しい時刻と日付APIについて特定の理解があると思います。次に、この新しいAPIに関するいくつかの重要な要素を確認しましょう。
1.時間ゾーンを処理するためにJavax.time.zoneidを提供します。
2。ローカルデートおよびローカルタイムクラスを提供します
3. Java 8の新しい時間と日付APIのすべてのクラスは、前の日付とカレンダーAPIの正反対であり、java.util.dateとSimpledateformatはスレッドではありません-安全。
4.新しい時間と日付のAPIの非常に重要な点は、瞬時、期間、日付、時刻、時間帯、期間など、時間と日付の基本概念を明確に定義することです。これらはすべてISOカレンダーシステムに基づいています。
5.すべてのJava開発者は、この新しいAPIで少なくともこれらの5つのクラスを知っておく必要があります。
5.1)2014-01-14T02:20:13.592Zのようなタイムスタンプを表します。これは、Java.time.clockクラスから取得できます。東京 "))。instant();
5.2)LocalDate 2014-01-14などの日付のない日付を表します。誕生日、記念日、導入日などを保存するために使用できます。
5.3)localtimeそれは、日付のない時間を表します
5.4)LocalDateTimeそれは日時が含まれていますが、タイムゾーンにはオフセットはありません
5.5)ZonedDateTimeこれは、UTC/グリニッジ時間に基づくタイムゾーンの調整を伴うフルタイムです
1.このライブラリのメインパッケージはJava.Timeで、日付、時刻、即時、および期間を表すクラスが含まれています。 2つのサブパッケージがあります。1つはjava.time.foramtです。これはこれが何に使用されているかが明らかであり、もう1つは低レベルからさまざまなフィールドにアクセスできるJava.time.temporalです。
2。タイムゾーンとは、同じ標準時間を共有する地球上の地域を指します。各タイムゾーンには一意の識別子があり、地域/都市(アジア/東京)形式とグリニッジ時間からのオフセット時間もあります。たとえば、東京のオフセット時間は+09:00です。
3.OFFSETDATETIMEクラスには、実際にLocalDateTimeとZoneOffsetが含まれています。グリニッジタイムオフセット(+/-時間:分、 +06:00または-08:00)を含む完全な日付(年、月、日)および時間(時間、分、ナノ秒)を表すために使用されます。
4. DateTimeFormatterクラスは、Javaの日付をフォーマットおよび解析するために使用されます。 SimpledateFormatとは異なり、それは不変でスレッドセーフであり、必要に応じて静的変数に割り当てることができます。 DateTimeFormatterクラスは、多くの事前定義されたフォーマットを提供し、必要な形式をカスタマイズすることもできます。もちろん、条約によれば、文字列を日付に変換するために使用されるparse()メソッドもあり、変換中にエラーが発生した場合、DateTimeParseException例外がスローされます。同様に、DateFormationクラスには、日付をフォーマットするためのFormat()メソッドもあります。
5。言い換えれば、「MMM D Yyyy」と「MMM DD Yyyy」の2つの日付形式もわずかに異なります。 「2014年1月2日」に登場する人は、2人のキャラクターが月から来ると予想されるため、エラーを報告します。この問題を解決するには、1日が1桁の場合、「2014年1月2日」に「2014年1月2日」に変更する必要があります。
これは、新しい時刻と日付のAPIであるJava 8に関するものです。これらの短い例は、この新しいAPIの新しいクラスのいくつかを理解するのに十分です。実際のタスクに基づいて説明されているため、日時と日付を処理する必要があるJavaで作業に遭遇した場合、もう検索する必要はありません。日付インスタンスを作成および変更する方法を学びました。また、純粋な日付、日付と時刻、日付とタイムゾーンの違い、2つの日付を比較する方法、および次の誕生日、記念日、保険日などの特定の日を特定する日を見つける方法についても学びました。また、スレッドローカル変数やサードパーティライブラリを使用せずに、Java 8の日付とフォーマットの日付をスレッドに安全な方法で解析し、フォーマットする方法を学びました。新しいAPIは、いつでも日付関連のタスクで有能です。