java.util.Date はもう古いらしい...

え? 1.8から既に古い?

...我が身は既に化石だった模様😭


気を取り直して、今は LocalDateTime がいい感じらしい(?)のでサンプルをちょろっと書いてみました。

がーーー

ここってソースコード貼り付けると死ぬんですよね...
本当に使い難い😑

仕方がないので平で。

フルで書くと java.time.LocalDateTime 。

現在時刻を取得したければ static メソッドの now(ZoneId zid) を使えば良し。
ZoneId は直系サブクラス ZoneOffset を使った方が分かりやすくて、例えば

LocalDateTime ldt = LocalDateTime.now(ZoneOffset.ofHours(9));

とすれば JST で取得できます。

もしUNIX時間で変数を使い回しているのなら ofEpochSecond(long sec, int nano, ZoneOffset zo) が簡単で、

LocalDateTime thatTime = LocalDateTime.ofEpochSecond((long)1630999605, 0, ZoneOffset.ofHours(9));

などとすれば良し。

流石に新しいと思ったのは月取得で、値で取りたい時は

// LocalDateTime ldt;
int month = ldt.getMonthValue();

とすれば良くて、これだと 0-11 ではなくて、しっかり 1-12 で取得できます。

ミリ秒を取得するメソッドは生憎ないので、ミリ秒で欲しければナノ秒で取得して 1000 * 1000 で割るしかない模様。

int millis = ldt.getNano() / 1000 / 1000;

曲者は toString() で、後ろから見て行って 0の部分は省略してしまうという何じゃこりゃな仕様。

例えば時間が 2021-09-07T16:34:00.000+0900 で作ったインスタンスで toString() を使うと、内容が

"2021-09-07T16:34"

で返って来てしまうと言う...😮‍💨

ここら辺を気を付けていれば、取り敢えず java.util.Date の感覚で使えるのでちょっと良いかなと。

parse(CharSequence text) とかもあって、例では textとして「2007-12-03T10:15:30」とか書いてありました。

あとはUNIX時間化ですが、継承メソッド toEpochSecond(ZoneOffset offset) を使えば良い模様。

ZoneOffset jp = ZoneOffset.ofHours(9);

LocalDateTime now = LocalDateTime.now(jp);
System.out.println(now);

long ep = now.toEpochSecond(jp);
System.out.println(ep);

LocalDateTime rvs = LocalDateTime.ofEpochSecond(ep, 0, jp);
System.out.println(rvs);

問題なし😃


...そう言えば java.time.ZonedDateTime なんてのもありました😅
これはまあ、またの機会に😁
posted by ずぼらな人 at 17:09Comment(0)

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント