投稿日:
2019年1月30日
最終更新日:
【LocalDate/LocalDateTime】Java8以降で秒単位またはミリ秒単位のUnixTimeを取得する方法まとめ【EpochSecond/EpochMilli】
YouTubeも見てね♪
ねこじゃすり
猫を魅了する魔法の装備品!
【最新機種】GoPro hero11 Black
最新機種でVlogの思い出を撮影しよう!
[ノースフェイス] THE NORTH FACE メンズ アウター マウンテンライトジャケット
防水暴風で耐久性抜群なので旅行で大活躍です!
ペヤング ソースやきそば 120g×18個
とりあえず保存食として買っておけば間違いなし!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK
メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
目次
UnixTimeに変換しよう
Java8で便利になった日付API
皆さんはJava8で一新された日付APIを利用していますか?
以前、当ブログでもご紹介致しました。
筆者はすっかり使いやすさの虜になってしまい、Calendar
クラスやDate
クラスはめっきり使わなくなりました。
直感的に扱いやすい点が魅力的ですよね♪
UnixTimeに変換するには?
そんな中で、システム開発をしているとUnixTime
で日付時刻を取り扱っている場合が出てきます。
UNIX時間(ユニックスじかん)またはUNIX時刻(ユニックスじこく、UNIX time(ユニックスタイム)、POSIX time(ポジックスタイム))とはコンピューターシステム上での時刻表現の一種。UNIXエポック、すなわち協定世界時 (UTC) での1970年1月1日午前0時0分0秒から形式的な経過秒数(すなわち、実質的な経過秒数から、その間に挿入された閏秒を引き、削除された閏秒を加えたもの)として表される。GPS時刻などとは異なり、大多数のシステムでは、本当の経過秒数を表すものではない
UNIX時間 – Wikipedia
しかし、この新しい日付APIを用いれば簡単にUnixTime
に変換する事が出来ちゃいます!
今回はLocalDate
及びLocalDateTime
それぞれで、秒単位のパターンとミリ秒単位のパターンに変換する方法をご紹介致します。
手順
秒単位
まずは秒までのUnixTime
を取得する方法をご紹介します。
LocalDate
LocalDate
の場合は以下のように記述します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import java.time.LocalDate;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
public class Sample
{
public static void main( String... args)
{
LocalDate ld = LocalDate.now();
System.out.println( ld );
//ZonedDateTime zdt = ld.atStartOfDay(ZoneOffset.UTC); UTCの場合
ZonedDateTime zdt = ld.atStartOfDay(ZoneOffset.ofHours(+9)); //JSTの場合
long epochSecond = zdt.toEpochSecond();
System.out.println( epochSecond);
}
}
|
まずはLocalDate
をZonedDateTime
に変換します。
この際に、UTC
なのかJST
なのかで引数の値を変える必要があるので気をつけましょう。
そして、ZonedDateTime
のtoEpochSecond
メソッドを使うことで秒単位のUnixTime
を取得することが可能になります♪
確認
それでは実行してみましょう。
1
2
|
2019-01-30
1548806400
|
それっぽい値が取れましたね。
では、このUnixTime
から日付に変換してみます。
1 |
2019年 1月30日 水曜日 00時00分00秒 JST
|
正しく変換出来ていますね♪
LocalDateTime
LocalDateTime
の場合は以下のように記述します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
public class Sample
{
public static void main( String... args)
{
LocalDateTime ldt = LocalDateTime.now();
System.out.println( ldt );
//ZonedDateTime zdt = ldt.atZone(ZoneOffset.UTC); UTCの場合
ZonedDateTime zdt = ldt.atZone(ZoneOffset.ofHours(+9)); //JSTの場合
long epochSecond = zdt.toEpochSecond();
System.out.println( epochSecond );
}
}
|
こちらも基本的にはLocalDate
の時と同じです。
まずはLocalDate
をZonedDateTime
に変換します。
この際に、UTC
なのかJST
なのかで引数の値を変える必要があるので気をつけましょう。
そして、ZonedDateTime
のtoEpochSecond
メソッドを使うことで秒単位のUnixTime
を取得することが可能になります♪
確認
それでは実行してみましょう。
1
2
|
2019-01-30T11:41:39.321
1548816099
|
それっぽい値が取れましたね。
では、このUnixTime
から日付に変換してみます。
1 |
2019年 1月30日 水曜日 11時41分39秒 JST
|
こちらも正しく変換出来ていますね♪
ミリ秒単位
次はミリ秒までのUnixTime
を取得してみます。
LocalDate
LocalDate
の場合は以下のように記述します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import java.time.LocalDate;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
public class Sample
{
public static void main( String... args)
{
LocalDate ld = LocalDate.now();
System.out.println( ld );
//ZonedDateTime zdt = ld.atStartOfDay(ZoneOffset.UTC); UTCの場合
ZonedDateTime zdt = ld.atStartOfDay(ZoneOffset.ofHours(+9)); //JSTの場合
long milliSecond = zdt.toInstant().toEpochMilli();
System.out.println( milliSecond );
}
}
|
まずはLocalDate
をZonedDateTime
に変換します。
この際に、UTC
なのかJST
なのかで引数の値を変える必要があるので気をつけましょう。
ここまでは秒単位の流れと同じですね。
そして、ここがポイントなのですが、ZonedDateTime
のtoInstant
メソッドで一旦Instant
化してからtoEpochMilli
メソッドを使うことでミリ秒単位のUnixTime
を取得することが可能になります♪
確認
それでは実行してみましょう。
1
2
|
2019-01-30
1548774000000
|
こちらもそれっぽい値が取れました。
では、こちらもUnixTime
から日付に変換してみます。
date
コマンドでミリ秒のUnixTime
から復元する方法がイマイチわからなかったので、コチラ のサイトで変換して確認しました。
正しく変換出来ていますね♪
LocalDateTime
LocalDateTime
の場合は以下のように記述します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
public class Sample
{
public static void main( String... args)
{
LocalDateTime ldt = LocalDateTime.now();
System.out.println( ldt );
//ZonedDateTime zdt = ldt.atZone(ZoneOffset.UTC); UTCの場合
ZonedDateTime zdt = ldt.atZone(ZoneOffset.ofHours(+9)); //JSTの場合
long milliSecond = zdt.toInstant().toEpochMilli();
System.out.println( milliSecond );
}
}
|
まずはLocalDate
をZonedDateTime
に変換します。
この際に、UTC
なのかJST
なのかで引数の値を変える必要があるので気をつけましょう。
ここまでは秒単位の流れと同じですね。
そして、ここがポイントなのですが、ZonedDateTime
のtoInstant
メソッドで一旦Instant
化してからtoEpochMilli
メソッドを使うことでミリ秒単位のUnixTime
を取得することが可能になります♪
確認
それでは実行してみましょう。
1
2
|
2019-01-30T11:57:31.122
1548817051122
|
こちらもそれっぽい値が取れました。
では、こちらもUnixTime
から日付に変換してみます。
こちらも正しく
変換出来ていますね♪
終わりに
以上のように、新しい日付APIを利用していれば、独自実装することなく既存のメソッドを利用することで簡単にUnixTime
を取得することが出来ました。
意外と知らない方が多いと思うので、困っている方はこちらの方法で試してみてください♪