FileTimeオブジェクトは、JavaのInstantオブジェクトを使用してLocalDateTimeに変換されます。
LocalDateTime ldt = LocalDateTime.ofInstant( FILE_TIME.toInstant(), ZoneId.systemDefault());
この例では、現在の日付でDateオブジェクトを作成します。 オブジェクトは現在時刻を使用してFileTimeに変換されます。 そのFileTimeは、Instantを使ってLocalDateTimeに変換されます。 3つの日付すべてがepocに変換され、それらが同じ日付を表していることを示します。 LocalDateTimeはDateTimeFormatterおよびMediumフォーマットを使用してフォーマットされ、値はローカライズされて出力に表示されます。
import java.nio.file.attribute.FileTime; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.time.format.FormatStyle; import java.util.Date; import java.util.Locale; import java.util.TimeZone; public class FileTimeDateTime { public static void main(String[] argv) { // 日付を作成 Date firstDate = new Date(); // 日付からFileTimeを作成する FileTime time = FileTime.fromMillis( firstDate.getTime() ); // FileTimeをLocalDateTimeに変換します LocalDateTime ldt = LocalDateTime.ofInstant( time.toInstant(), ZoneId.systemDefault()); // すべての日付についてエポックからの経過秒数を表示する System.out.println("ミリ秒単位の日付:\t" + firstDate.getTime() / 1000 ); System.out.println("ミリ秒単位のFileTime:\t" + time.toMillis() / 1000 ); System.out.println("ミリ秒単位のLocalDateTime:\t" + ldt.toEpochSecond( ZoneOffset.ofHours( TimeZone.getDefault().getRawOffset() / (3600*1000) ) ) ); System.out.println(); System.out.println("LocalDateTimeは文字列として表示されます。 " + ldt.format( DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM) .withLocale( Locale.JAPANESE ) ) ); } }
ミリ秒単位の日付: 1562370779
ミリ秒単位のFileTime: 1562370779
LocalDateTimeミリ秒: 1562374379
LocalDateTimeは文字列として表示されます。 2019/07/05 16:52:59
エポック以降、3つの日付はすべて同じ秒数です。