SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

HRzine Day(エイチアールジン・デイ)は、人が活き会社が成長する人事のWebマガジン「HRzine」が主催するイベントです。毎回、人事の重要課題を1つテーマに設定し、識者やエキスパードが持つ知見・経験を、参加者のみなさんと共有しています。

直近開催のイベントはこちら!

HRzine Day 2024 Winter

2024年2月1日(木)12:00~17:40

主要製品スペック一覧

人事業務の効率・確度・精度を高めるために欠かせないHRテクノロジー。その主な製品の機能を分野ごとに比較できる資料群です。製品検討の参考資料としてご活用ください。

人事労務管理システム<br>主要製品スペック一覧 2023

人事労務管理システム
主要製品スペック一覧 2023

その他のスペック一覧

タレントマネジメントシステム<br>主要製品スペック一覧 2023

タレントマネジメントシステム
主要製品スペック一覧 2023

採用管理システム<br>主要製品スペック一覧 2023

採用管理システム
主要製品スペック一覧 2023

みちこ先生のオラクル認定Javaプログラマ Silver SE 7/8 合格コース | 特別授業

【認定Java Silver】ここが変わった! OCJP Silver SE 8要点解説[前編] 〜 旧バージョン試験との違い・新出題Date and Time API


  • Facebook
  • Twitter
  • Pocket
  • note
  • hatena

本記事の目次本記事の目次 )

Date and Time APIの基本

JDK1.0から提供されているjava.util.Dateクラスは、日付を年、月、日、時、分、秒の値として解釈し、さらに、文字列で表現された日付データを構文解析して、Dateオブジェクトとして扱える機能がありました。しかし、国際化対応がなされていなかったり、機能が限られていたりしました。そのため、JDK1.1では、日付と時刻を様々な方法で表すjava.util.Calendarクラスや、サマータイムなど他の調整を表すjava.util.TimeZoneクラス、フォーマット(書式化)を行うjava.text.DateFormatクラスが追加されました。

しかし、それでもいくつか問題が残りました。たとえば、java.util.Dateクラスはスレッドセーフでないため、マルチスレッド環境下で使用する際には実装レベルで制御する必要がありました。また、DateクラスのAPI設計には不備があり、多くのメソッドが非推奨となっています。

それらの不具合を改善するため、Java SE 8でDate and Time APIが導入されました。このAPIは、java.timeパッケージとして提供されています。

Date and Time APIの主な特徴は以下のとおりです。

  • 日付、時間、日付/時間のためのクラスが個別に提供されている
  • Date and Time APIの各クラスは不変オブジェクト(イミュタブル)となるため、マルチスレッド環境下でも安全に使用できる
  • 日時演算のためのAPIが充実している

java.timeパッケージには多くのクラスが含まれていますが、ここでは出題頻度の高いクラス(表2)について解説します。

表2:java.timeパッケージの主なクラス
クラス名 説明
LocalDate 日付(年-月-日として表示されることが多い)を表す不変オブジェクト
LocalTime LocalTimeは、時間(時-分-秒として表示されることが多い)を表す不変オブジェクト
LocalDateTime 日付/時間(年-月-日-時-分-秒として表示されることが多い)を表す不変オブジェクト
Period 期間を扱う。期間とは日付ベース間隔(「2年3か月と4日」など)である

各オブジェクト生成のためのメソッド

LocalDateLocalTimeLocalDateTimeの各クラスのコンストラクタにはprivate修飾子が付与されているため、new演算子によるインスタンス化はできません。そのかわりに、各クラスに共通で用意されているメソッドを使用してオブジェクトを生成します。ここではLocalDateクラスのメソッドを紹介します(表3)。

表3:オブジェクト生成のためのメソッド
メソッド名 説明
static LocalDate now() 現在の日付からLocalDateのオブジェクトを取得する
static LocalDate of(int year,int month,int dayOfMonth) 年、月、日からLocalDateのオブジェクトを取得する
static LocalDate parse(CharSequence text) 2007-12-03などのテキスト文字列からLocalDateのオブジェクトを取得する

各メソッドを使用したサンプルコードは次のとおりです(Sample1.java)。

■Sample1.java
import java.time.LocalDate;

public class Sample1 {
  public static void main(String[] args) {
    LocalDate dateNow = LocalDate.now();
    LocalDate dateOf = LocalDate.of(2015, 10, 1);
    LocalDate dateP = LocalDate.parse("2015-10-01");
    
    System.out.println("LocalDate.now       : " + dateNow);
    System.out.println("LocalDate.of        : " + dateOf);
    System.out.println("LocalDate.parse     : " + dateP);
  }
}
■Sample1.javaの実行結果
LocalDate.now       : 2015-11-16
LocalDate.of        : 2015-10-01
LocalDate.parse     : 2015-10-01

5行目はnow()メソッドを使用して、現在の日付からLocalDateオブジェクトを作成しています。また、6行目ではof()メソッドを使用しています。なお、引数で指定した値が不適切な場合(範囲外である場合)、実行時にDateTimeException例外が発生します。たとえば、6行目を範囲外にした場合の実行時エラーは次のとおりです。

Sample1.javaの6行目を変更した場合の実行時エラー
(現行)
6.  LocalDate dateOf = LocalDate.of(2015, 10, 1);
//LocalDate dateOf = LocalDate.of(2015, 10, 01); //1を01としてもOK

(修正後)
//10月は31までであるため、32は範囲外
6. LocalDate dateOf = LocalDate.of(2015, 10, 32); 
■修正後の実行結果
Exception in thread "main" java.time.DateTimeException: Invalid value for DayOfMonth (valid values 1
 - 28/31): 32
        at java.time.temporal.ValueRange.checkValidValue(ValueRange.java:311)
        at java.time.temporal.ChronoField.checkValidValue(ChronoField.java:703)
        at java.time.LocalDate.of(LocalDate.java:268)
        at Sample1.main(Sample1.java:6)

また、7行目ではparse()メソッドを使用しています。日付はハイフン(-)で区切ります。また、LocalTimeクラスやLocalDateTimeクラスでもparse()メソッドは提供されており、時刻はコロン(:)で区切ります。

now()of()parse()の各メソッドは、各クラスごとにオーバーロードされています。様々な引数のパターンがあるので、APIで確認してください。

次のページ
DateTimeFormatterの利用

この記事は参考になりましたか?

  • Facebook
  • Twitter
  • Pocket
  • note
  • hatena
みちこ先生のオラクル認定Javaプログラマ Silver SE 7/8 合格コース連載記事一覧

もっと読む

この記事の著者

山本道子(ヤマモト ミチコ)

2004年Sun Microsystems社を退職後、有限会社Rayを設立し、システム開発、インストラクタ、執筆業などを手がける。著書に『オラクル認定資格教科書 Javaプログラマ Bronze SE 7/8』『同Silver SE 8』『同Gold SE 8』のほか、『SUN教科書 Webコンポーネントディベロッパ(SJC-WC)』、『携帯OS教科書 Androidアプリケーション技術者ベーシック』、『Linux教科書 LPICレベル1 スピードマスター問題集』(共著)、監訳書に『SUN教科書 Javaプログラマ(SJC-P)5.0・6.0 両対応』(いずれも翔泳社刊)などがある。月刊誌『日経Linux』(日経BP社刊)でLPIC対策記事を連載。日々の楽しみは晩酌、好きな言葉は表面張力。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事をシェア

  • Facebook
  • Twitter
  • Pocket
  • note
  • hatena
HRzine
https://hrzine.jp/article/detail/38 2016/01/05 19:48

Special Contents

AD

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

HRzine Day(エイチアールジン・デイ)は、人が活き会社が成長する人事のWebマガジン「HRzine」が主催するイベントです。毎回、人事の重要課題を1つテーマに設定し、識者やエキスパードが持つ知見・経験を、参加者のみなさんと共有しています。

2024年2月1日(木)12:00~17:40

イベントカレンダーを見る

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング