Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaで指定された日時のミリ秒単位の時間(エポック時間)を取得する方法

はじめに

java.text.SimpleDateFormatクラスは、文字列をDateオブジェクトへ変換(パース)したり、逆にDateオブジェクトを文字列としてフォーマットしたりするために使用されるクラスです。

  • このクラスのコンストラクタの一つは、希望する日付形式を表すString型の値を受け取り、SimpleDateFormatオブジェクトを生成します。
  • 文字列をDateオブジェクトとして変換するには、希望するフォーマット文字列を渡してこのクラスをインスタンス化します。
  • parse()メソッドを使って日付文字列を解析します。
  • getTime()メソッドを使うことで、1970年1月1日00:00:00 UTCからの経過ミリ秒数(エポック時間)を取得できます。

例1:SimpleDateFormatを使用する方法

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Sample {
    public static void main(String args[]) throws ParseException {
        // SimpleDateFormatクラスのインスタンス化
        SimpleDateFormat dateformatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
        // 指定された文字列をDateオブジェクトにパース
        String str = "25-08-2009 11:20:45";
        Date date = dateformatter.parse(str);
        long msec = date.getTime();
        System.out.println("指定された日付のエポック時間: " + msec);
    }
}

実行結果

指定された日付のエポック時間: 1251179445000

例2:Calendarクラスを使用する方法

set()メソッドを使用すると、Calendarオブジェクトに日付や時刻の値を直接設定できます。このクラスのgetTimeInMillis()メソッドは、設定された日時のエポック時間をミリ秒単位で返します。

import java.util.Calendar;
public class Sample {
    public static void main(String args[]) {
        // Calendarインスタンスの取得
        Calendar cal = Calendar.getInstance();
        // 年、月、日、時、分、秒を指定(月は0始まりなので9は10月を表す)
        cal.set(2014, 9, 11, 10, 25, 30);
        long msec = cal.getTimeInMillis();
        System.out.print(msec);
    }
}

実行結果

1413003330758

なお、Calendarクラスでは月の値が「0〜11」で表現されるため、「9」を指定すると実際には10月になります。この点は初心者が陥りやすい落とし穴なので注意が必要です。

例3:ZonedDateTime(Java 8以降のDate-Time API)を使用する方法

Java 8以降では、よりモダンなjava.timeパッケージが推奨されています。of()メソッドを使用してZonedDateTimeオブジェクトに日付と時刻の値を設定し、InstantクラスのtoEpochMilli()メソッドを呼び出すことで、その日時のエポック時間をミリ秒単位で取得できます。

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Sample {
    public static void main(String args[]) {
        // タイムゾーンを指定してZonedDateTimeオブジェクトを作成
        ZoneId id = ZoneId.of("Asia/Kolkata");
        ZonedDateTime obj = ZonedDateTime.of(2014, 9, 11, 10, 25, 30, 22, id);
        Instant instant = obj.toInstant();
        long msec = instant.toEpochMilli();
        System.out.println("ミリ秒: " + msec);
    }
}

実行結果

Milli Seconds: 1410411330000

まとめ

Javaで特定の日時をミリ秒単位(エポック時間)に変換するには、主に以下の3つの方法があります。

  • SimpleDateFormat + Date:文字列から日付をパースしてgetTime()で取得。従来からの定番手法ですが、スレッドセーフではない点に注意。
  • Calendar:set()メソッドで日時を設定し、getTimeInMillis()で取得。月が0始まりである点に注意。
  • ZonedDateTime / Instant:Java 8以降のDate-Time API。タイムゾーンを明示的に扱え、イミュータブルでスレッドセーフなため、新規開発ではこの方法が最も推奨されます。
  1. C++で現在の日付と時刻を取得する方法

    C++で現在の日付と時刻を取得するには、標準ライブラリの<ctime>ヘッダーに含まれる関数を利用します。ここでは、time()関数とctime()関数を使って、ローカルの現在日時を取得・表示する基本的な方法を紹介します。サンプルコード#include <iostream> using namespace std; int main() { time_t now = time(0); char *date = ctime(&now); cout << The local date and time : << d

  2. Windows 11で日付と時刻を変更・設定する方法【初心者向けガイド】

    Windowsパソコンの日付と時刻は、通常インターネットに接続した時点で自動的に設定されます。ただし、必要に応じてこれらの設定を手動で変更することも可能です。この記事では、Windows 11で日付と時刻を変更するための手順をわかりやすく解説していきます。 Windows 11で日付と時刻を変更する方法 Windows 11で日付と時刻を変更するには、Windowsの「設定」アプリを使用します。まず、スタートメニューの検索バーに「設定」と入力し、表示された最適な結果を選択しましょう。あるいは、キーボードショートカットのWin + Iキーでも設定アプリを開くことができます。 設定アプリを開いたら