え? 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 なんてのもありました😅
これはまあ、またの機会に😁
この記事へのコメント