Java8のtimeパッケージのLocalTimeとLocalDateを触ってみた

公開日: : 最終更新日:2015/11/25 プログラミング

ほんのりと仕事に出てきそうな匂いがあったので、

予習もかねてjava8のtimeパッケージを触ってみました!

今までのDateクラスやCalendarクラスに比べると、

日付の演算機能やタイムゾーンを考慮した機能があるようで、

今回は日付の演算を中心に試してみました!

※間違いなどあったらコメント欄で指摘ください。

今までとの変更点

こんなことが出来るようになったようです。

  1. 日付の演算(◯日後、◯時間前など)
  2. タイムゾーンやサマータイムを考慮した処理

実際にやってみた

今回は日付の演算(加算のサンプルのみ。減算は同様に負数を使えばよい)を試してみました。

timeパッケージでは色々なクラスが提供されていますが、

タイムゾーンとか関係無しのLocalTimeクラスとLocalDateクラスが

動作確認には一番単純そうだったので、今回はこのクラスで日付操作を試しました!

ちなみに、タイムゾーンを考慮したり、

その他色々な状況に応じてクラスを使い分けられるようにと

色々なクラスが定義されているようです。

詳細は javadoc をご参照ください!まだ私も理解しきれていません。

インスタンスの生成例

// 今の時刻
LocalTime nowTime = LocalTime.now();
// 今の日付
LocalDate nowDate = LocalDate.now();

// 指定した時刻(20時30分40秒)
LocalTime ofTime = LocalTime.of(20, 30, 40);
// 指定した日付(2014年1月14日)
LocalDate ofDate = LocalDate.of(2015, 1, 14);

ちなみに1回ハマったんですが、

提供されているクラスは基本的にimmutable(=一度生成されたら情報が変わらない)です。

後から出てきますが、演算時には新しいインスタンスが返却されるので、

もし情報を変更したければ、再代入しないとならないです。

時間の加算

plusメソッドやplusXXX(時、分、秒)メソッドが使えます!

// 2時間3分4秒経過後の時間
ofTime = ofTime.plusHours(2);
ofTime = ofTime.plusMinutes(3);
ofTime = ofTime.plusSeconds(4); // 22時33分44秒になる。

// ===なお、別の方法としてこういう書き方も出来る模様。
// 「2時間3分4秒」を表すDurationクラスを生成。Durationクラスは時間の表現に適しているクラス。
Duration d = Duration.parse("PT2H3M4S");
// plusメソッドで加算
nowTime.plus(d);

/* こっちのほうがスマートか?(あまり自信はない。
* 書式は ISO-8601デュレーション・フォーマットPnDTnHnMn.nSベース
* 詳細:http://docs.oracle.com/javase/jp/8/docs/api/java/time/Duration.html#parse-
java.lang.CharSequence-
*/

日付の加算

こちらも基本的には時間の加算と同じ要領です。

// 「1年と2ヶ月3日」を表すPeriodクラスを生成。Periodクラスは日付の表現に適しているクラス。
Period p = Period.of(1, 2, 3);

// plusメソッドで加算
nowDate.plus(p); // 2015年3月17日になる。

試してみた感想

もっと理解が深まれば色々と出来そうなのですが、

使いこなすにはまだまだ理解不足だと感じました。もし使うことになったら仕事大丈夫なのだろうか…

Duration使ったplusメソッドの使い方とかあれで正しいのかイマイチ自信が持てないですね…。

何か最適解が他にあったらぜひコメント欄で教えてください!

関連記事

スクリーンショット 2014-08-05 0.53.46

初心者のiOSアプリ(収支表)作成記。その1

iOSアプリ作成経験0の私が、収支表アプリを作ってみます。 ブログ書きながら勉強してるのでほと

記事を読む

no image

javaでzip作る時の圧縮レベルの話

いわゆる無圧縮zipファイルをjavaで作ることがあったので、覚え書きです。 ついでに圧縮レベ

記事を読む

no image

chromeで「このウェブページにアクセスできません」が出たときの対処法

自宅以外の環境でchrome使おうとして、検索した瞬間に「このウェブページにアクセスできません」と出

記事を読む

no image

シェルスクリプトでtsvファイルとcsvファイルを処理する方法

シェルスクリプトでtsvファイルを要素ごとに配列に格納し、処理する方法です。 普通はcsvファ

記事を読む

no image

bashにおける角括弧”[]“の扱いで困ったこと

あるShellScriptでパスワードを乱数生成するときに   $ cat /

記事を読む

no image

CSSで表の罫線出そうとしたら点線と実線が混ざってどん詰まりした話

デザイナーさんからもらったCSSをHTMLの表に適用したら、 IEで見た時だけなぜか枠線の一番

記事を読む

no image

学生時代に1ミリも知らなかったJavaの開発風景

※この記事は、苫小牧高専 Advent Calendar 2016 - Adventar 9日目の記

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

no image
学生時代に1ミリも知らなかったJavaの開発風景

※この記事は、苫小牧高専 Advent Calendar 2016 -

no image
gitbucketで再起動に失敗してDBエラーが起きた話

とあるAdvent calendarを書くことになったのですが、そもそ

no image
機械学習について簡単におさらいした

機械学習について、実際あんまりよくわかってなくね?ってなったので

no image
svnを使っている作業場でgitを普及させるためにやったこと

今回は、ある作業場でgitを普及させたい!という思いから、私が個人的に

no image
jenkinsのジョブでIllegalArgumentExceptionが起きた

Jenkinsのジョブで、 java.lang.IllegalArgu

→もっと見る

PAGE TOP ↑