Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@wingsys

Java 8 DateTime API をじわじわと使っていきたい(今更)

More than 1 year has passed since last update.

すごく今更だけど、しかしなんだかんだ敬遠されがちなので、使えるところから使っていきたい。というメモ。

時間単位

これまで: リテラル or java.util.concurrent.TimeUnit

https://docs.oracle.com/javase/jp/8/docs/api/java/util/concurrent/TimeUnit.html
実は Java 5 からいた「時間単位」クラス。

// int sec = 60*3; // これが
long sec = TimeUnit.MINUTES.toSeconds(3); // こうなる

うわあ、この時点でなんかもう便利だ。
実はJava 5なんてもはや "昔" の時点で 60*3 とか 1*24*60*60 とかそんなことやる必要なかった!

Java8: java.time.Duration

// int sec = 60*3; // これが
long sec = Duration.ofMinutes(3).getSeconds(); // こうなった

正直これはどちらを使ってもいいと思う (少なくとも 60*3 よりよっぽど良いのはどっちでも間違いない) 。
しかしこちらのほうが新しいし、何よりも 「時間単位、3分を、秒で」と読めるのでこっちのが好み。

フォーマット / パース

これまで: java.text.SimpleDateFormat

遅い! スレッドセーフじゃない! → めんどくさい!

java.time.format.DateTimeFormatter

このクラスは不変でスレッドセーフです。

DateTimeFormatterはスレッドセーフなので、staticフィールドに定義しておいてマルチスレッドで使うことが出来る。
ついでに、インスタンス生成もSimpleDateFormatより軽い。
整形(format)に関してはSimpleDateFormatより速いような遅いような微妙な感じだが、
解析(parse)もDateTimeFormatterの方が速い。

俺たちはこれが欲しかったんだ!
もう Apache commons に頼らなくてもいいんだ!

但し、

しかしDateTimeFormatterの場合、対象文字列内の空白は、書式文字列内に空白が指定されている場合だけ受理される。

とか、

空白をオプション書式にすれば、空白が有っても無くても受理されるようになる。
が、複数の空白には対応できない。(オプションを複数指定できるが、任意の個数には対応しきれない)

とか、微妙な差があるので要注意。
(でもまあこのぐらいの差ならクレンジングすれば済むことだよね!)

3
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
wingsys

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?