Anker PowerCor
旅行には必須の大容量モバイルバッテリー!
【最新機種】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
を取得することが出来ました。
意外と知らない方が多いと思うので、困っている方はこちらの方法で試してみてください♪