2015-10-27 8 views
3

new File(url).lastModified() возвращает long, равное количеству миллисекунд, начиная с эпохи, основанной на GMT.Получить последнюю дату и время изменения файла как локальную строку даты/времени

Что такое простой способ конвертировать это в String, представляющий системно-локальную дату/время?

Если вам действительно нужно, чтобы увидеть попытку у меня здесь, но это ужасный беспорядок, и это неправильно так или иначе:

LocalDateTime.ofEpochSecond(new File(url).lastModified()/1000,0,ZoneOffset.UTC).atZone(ZoneId.of("UTC")).format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG)) 

За LocalDateTime я просто понятия не имею, как время API работает в.

ответ

3

Чтобы получить время последнего изменения файла, вы должны использовать Java NIO.2 API, который непосредственно решает проблему:

FileTime fileTime = Files.getLastModifiedTime(Paths.get(url)); 
System.out.println(fileTime); // will print date time in "YYYY-MM-DDThh:mm:ss[.s+]Z" format 

Если вы хотите получить доступ на другие свойства (как в прошлый раз, создание доступа время), вы можете прочитать основные атрибуты пути с помощью Files.readAttributes(path, BasicFileAttributes.class).

+0

Можно ли форматировать 'FileTime' по-другому, чтобы по умолчанию, без первого возврата к квадрату с помощью' FileTime :: toMillis'? – Museful

+1

@tennenrishin Да, вы можете получить Instant с ['toInstant()'] (https://docs.oracle.com/javase/8/docs/api/java/nio/file/attribute/FileTime.html#toInstant -) и отформатируйте его, используя ['DateTimeFormatter'] (https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html). – Tunaki

+0

'DateTimeFormatter.ofPattern (« uuuu-MMM-dd HH: mm: ss »). Format (fileTime.toInstant())' throws 'java.time.temporal.UnsupportedTemporalTypeException: Неподдерживаемое поле: год для меня. Что я делаю не так? – Museful