JavaでUnixタイムスタンプ(ミリ秒)を取得・変換する方法を徹底解説!
生徒
「Javaで現在時刻をミリ秒で取得する方法ってありますか?あと、Unixタイムスタンプって何ですか?」
先生
「Javaでは簡単にUnixタイムスタンプを取得できますよ。Unixタイムスタンプは、1970年1月1日0時0分0秒(UTC)からの経過時間を秒やミリ秒で表した数値のことです。」
生徒
「じゃあ、そのミリ秒を日付に変換したり、逆に日付からミリ秒にしたりもできますか?」
先生
「できますよ。それでは、JavaでのUnixタイムスタンプの扱い方を順に見ていきましょう!」
1. Unixタイムスタンプ(ミリ秒)とは?
Unixタイムスタンプとは、1970年1月1日0時0分0秒(UTC)からの経過時間を秒またはミリ秒単位で表した数値のことです。JavaではこのUnixエポックからのミリ秒値を取得・変換することで、日付や時間の管理を効率的に行えます。
例えばWeb APIのレスポンス、データベースの時刻管理、ログファイルなどでよく使われています。
2. 現在時刻のUnixタイムスタンプ(ミリ秒)を取得する方法
Javaで現在時刻をミリ秒単位で取得するには、System.currentTimeMillis()を使うのが最もシンプルです。
public class TimestampExample {
public static void main(String[] args) {
long millis = System.currentTimeMillis();
System.out.println("現在のUnixタイムスタンプ(ミリ秒): " + millis);
}
}
現在のUnixタイムスタンプ(ミリ秒): 1736013457123
この方法はJava SE 1.0から使える古典的な方法ですが、非常に信頼性が高いです。
3. Instantクラスを使ってミリ秒を取得・変換
Java 8以降ではjava.timeパッケージのInstantを使うのが主流です。Instantはタイムスタンプ専用のクラスで、ミリ秒取得や変換も簡単にできます。
import java.time.Instant;
public class InstantExample {
public static void main(String[] args) {
Instant now = Instant.now();
long millis = now.toEpochMilli();
System.out.println("Instantから取得したミリ秒: " + millis);
}
}
Instantから取得したミリ秒: 1736013457123
toEpochMilli()メソッドを使うことで、Instantからミリ秒のUnixタイムスタンプを取得できます。
4. ミリ秒から日付(LocalDateTime)へ変換する方法
取得したミリ秒を日付形式に変換したい場合は、InstantをLocalDateTimeに変換します。変換にはZoneId(タイムゾーン)の指定が必要です。
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
public class ConvertToDateTime {
public static void main(String[] args) {
long millis = 1736013457123L;
Instant instant = Instant.ofEpochMilli(millis);
LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.of("Asia/Tokyo"));
System.out.println("変換後の日時: " + dateTime);
}
}
変換後の日時: 2025-09-05T10:57:37.123
日本時間に変換したい場合はZoneId.of("Asia/Tokyo")を使います。タイムゾーンを間違えると、表示される時刻も変わってしまうので注意しましょう。
5. LocalDateTimeからミリ秒に変換する方法
逆にLocalDateTimeからUnixタイムスタンプ(ミリ秒)を取得するには、まずZonedDateTimeやInstantに変換する必要があります。
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.Instant;
public class ConvertToMillis {
public static void main(String[] args) {
LocalDateTime dateTime = LocalDateTime.of(2025, 9, 5, 10, 57, 37);
ZonedDateTime zonedDateTime = dateTime.atZone(ZoneId.of("Asia/Tokyo"));
Instant instant = zonedDateTime.toInstant();
long millis = instant.toEpochMilli();
System.out.println("ミリ秒に変換: " + millis);
}
}
ミリ秒に変換: 1736013457000
このように日付と時刻をミリ秒に変換できれば、Webサービスやデータベースなどでの時刻管理にも活用できます。
6. Dateクラスからミリ秒を取得する方法
古いJavaコードではjava.util.Dateが使われていることがあります。この場合、getTime()メソッドでミリ秒を取得できます。
import java.util.Date;
public class DateExample {
public static void main(String[] args) {
Date date = new Date();
long millis = date.getTime();
System.out.println("Dateクラスのミリ秒: " + millis);
}
}
Dateクラスのミリ秒: 1736013457123
新しいプロジェクトではjava.timeを使うことが推奨されますが、既存コードの保守ではDateクラスもよく出てきます。
7. タイムスタンプをフォーマットして表示する方法
取得したUnixタイムスタンプを「yyyy-MM-dd HH:mm:ss」形式で整形表示したい場合は、DateTimeFormatterを使います。
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
public class FormatTimestamp {
public static void main(String[] args) {
long millis = 1736013457123L;
Instant instant = Instant.ofEpochMilli(millis);
LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.of("Asia/Tokyo"));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatted = dateTime.format(formatter);
System.out.println("フォーマット表示: " + formatted);
}
}
フォーマット表示: 2025-09-05 10:57:37
日付を見やすい形式に整えることで、ログ表示や画面表示に活用しやすくなります。