ファイルのタイムスタンプを取得すると ロング値 が返ってきます。これは 1970年1月1日0時0分0秒 からの経過時間をミリ秒単位で測定した値で、いわゆる エポック時間 です。
このロングの値を 日時形式 に変換してみます。方法が2種類あり
- Java8 で登場した 日付-時間 API を使う
- それ以前から存在する Date と Calendar を使う
方法です。
- 目次 -
スポンサーリンク
日付-時間 API を使う
日付-時間 API には Instant というクラスがあり、このクラスでエポック時間を扱います。日時をあらわすのは LocalDateTime です。
手順としては
- エポック時間から Instant を生成し
- それを元に LocalDateTime を生成する
という流れになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import java.io.File; import java.time.Instant; import java.time.LocalDateTime; public class Test { public static void main(String[] args) { // file_1.txt の更新日時は 2018/4/19/ 21:59 File f = new File("/tmp/file_1.txt"); // 更新日時 long値 ⇒ Instant Instant instant = Instant.ofEpochMilli(f.lastModified()); // Instant ⇒ LocalDateTime LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); System.out.println(ldt.getYear()); // 2018 System.out.println(ldt.getMonthValue()); // 4 System.out.println(ldt.getDayOfMonth()); // 19 System.out.println(ldt.getHour()); // 21 System.out.println(ldt.getMinute()); // 59 } } |
(簡単な応用)日時の判定
ファイルの日付が今日かどうかを判定してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.io.File; import java.time.Instant; import java.time.LocalDateTime; public class Test { public static void main(String[] args) { File f = new File("/tmp/file_1.txt"); Instant instant = Instant.ofEpochMilli(f.lastModified()); // long値 ⇒ Instant LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); // 今日の 0時 0分 LocalDateTime today = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS); if (ldt.isAfter(today) || ldt.isEqual(today)) { System.out.println("今日の日付 !"); } } } |
Date、Calendar を使う
エポック値をもとに Date を生成し、そのインスタンスを Calendar に渡します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.io.File; import java.util.Calendar; import java.util.Date; public class Test { public static void main(String[] args) { File f = new File("/tmp/file_1.txt"); Date date = new Date(f.lastModified()); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); System.out.println(calendar.get(Calendar.YEAR)); // 2018 System.out.println(calendar.get(Calendar.MONTH)); // 3 (0~11で返ってくる) System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); // 19 System.out.println(calendar.get(Calendar.HOUR_OF_DAY)); // 21 System.out.println(calendar.get(Calendar.MINUTE)); // 59 } } |
Date クラスにも getYear や getMonth といったメソッドがありますが、非推奨になっています。