Javaを使用してFileTimeをLocalDateTimeに変換する方法

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つの日付はすべて同じ秒数です。

参考文献:

FileTime
Package java.time