API」が追加された。同APIの主なポイントについて、米国オラクルのJavaエバンジェリスト、アンジェラ・カイセド氏が解説する。310として標準化された同APIは、Javaプログラムにおける日付や時間の取り扱いを大幅に改善する、極めて重要な機能だ。米国オラクルでJavaエバンジェリストを務めるアンジェラ・カイセド氏による同APIの解説をお届けする。Know」の内容を基に構成しています。SEには、古くからクラスjava.util.Date、java.util.Calendarを中心とする日付/時刻を扱うためのAPIが用意されていた。その理由を、カイセド氏は次のように説明する。「新しいAPIを作った理由は、これまでのAPIが日時を正確に扱うには不完全であり、さまざまな問題を抱えていたからです。私たちは、それらの問題を解消した新しいAPIを設計する必要性に迫られていました。310は、主に次のような特徴を備える。これらは、まさに従来のAPIに不足していたものだ。310は既存のAPIの変更ではなく、従来のものとは別に、まったく新たなパッケージやクラス、インタフェースが定義されている。APIの基本となるのは、ISOカレンダーを扱うためのクラス群であり、これらはパッケージjava.timeに集約されている。新しいクラスと従来のクラスとの対応関係は次のようになる。DECEMBERまた、新しいAPIでは、メソッド名をわかりやすくするための整理が行われており、基本的に次に示す命名規則にのっとっているという。オブジェクトの日時を別のオブジェクトと比較するISOカレンダーのための主なクラスには、次のようなものがある。※クリックすると拡大画像が見られますこのうち、名前が「Local」で始まるクラスが最も基本的なものであり、これらは時差やタイムゾーンをサポートしていない。時差やタイムゾーンを考慮する必要がある場合は、名前が「Offset」で始まる2つのクラスや、クラスZonedDateTimeを使う必要がある。上記のほかに曜日を表す列挙型としてクラスDayOfWeekが、月を表す列挙型としてクラスMonthが用意されている。クラスDayOfWeekでは月曜から日曜までのそれぞれに1から7の定数が割り当てられており、クラスMonthでは1月から12月までのそれぞれに1から12の定数が割り当てられている。これは従来の定数の割り当て方とは異なる(従来は日曜が1、1月が0だった)ので注意が必要だ。次に示すのは、クラスLocalDateの使用例である。LocalDateは年月日を表すクラスであり、時、分、秒なしで日付だけを扱う場合にはこのクラスを使用する。9).getDayOfWeek();●戻り値Mondayまた、次のコードはクラスYearMonthの使用例だ。YearMonthは年月を表すクラスであり、この例ではメソッドlengthOfMonthによって指定した月の日数を取得している。28日付なしで時刻だけを扱う場合には、クラスLocalTimeを使用する。次のコードは、同クラスを使って時刻を連続して出力するコードの例である。thisSec.getSecond());}一方、日付と時刻を合わせて扱う場合にはクラスLocalDateTimeを使用する。次に示すのは同クラスの使用例だ。2013-01-24T17:14:00.481タイムゾーンと時差を扱うためのクラス群タイムゾーンと時差を扱うためのAPIも一新された。カイセド氏が紹介したタイムゾーンの取り扱いに関係するクラスをまとめると、次のようになる。クラスZoneId:タイムゾーンを一意的に区別するためのタイムゾーンIDを表す。InstantとLocalTimeZoneの変換ルールを決めるために使われるクラスZoneOffset:UTC/グリニッジからの時差を表すクラスZonedDateTime:タイムゾーンを含む日時を扱うクラスOffsetDateTime:タイムゾーンIDを持たず、時差だけを含む日時を扱うクラスOffsetTime:タイムゾーンIDを持たず、時差だけを含む時間を扱う「先にご紹介したクラスLocalDateやLocalDateTimeなどは時差をサポートしていないため、時差を考慮する必要があるプログラムではこれらのクラスを使用します。その際、特にタイムゾーンを考慮する必要がある場合には、クラスZonedDateTimeを使う必要があります」(カイセド氏)例えば、米国サンフランシスコから東京へ飛行機で移動する際、出発および到着の現地時間を取得するプログラムをクラスZonedDateTimeを使って書くと、次のようになる。effect.)ご覧のとおり、出発地はサンフランシスコであるため、タイムゾーンを「America/Los_Angeles」として時刻を取得する。到着地は東京なので、タイムゾーンに「Asia/Tokyo」を指定して時刻を取得する。クラスOffsetDateTimeを使ったコードの例は次のようになる。25th.このコードでは、まず2013年7月20日19時30分を表すLocalDateTimeオブジェクトを生成したうえで、そこからマイナス8時間の時差を設定したOffsetDateTimeオブジェクトを生成している。後ほど紹介するクラスTemporalAdjustesを使って「7月の最後の木曜日」の日付を特定している。お試しいただけるトライアル・サービスをご提供しております。permission.×このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。