Во время обучения на базовом курсе Java столкнулся с проблемой Java, которую на лекции анонсировал лектор – это работа с датами и временем. Несмотря на то, что в java имеется множество классов для работы с датой и временем, тем не менее большинство этих классов работают только со своими форматами. Такое положение дел серьезно осложняет работу над проектами и создает предпосылки для труднодиагностируемых ошибок.
Выход из этой ситуации я вижу в разработке методов – помощников, позволяющих конвертировать различные форматы дат и времени. Например, такой популярный атрибут файла, как LastModifiedTime
, получаемый одноименным методом Files.getLastModifiedTime(path)
, возвращает дату в формате FileTime
. Какой класс работает с этим форматом? Как обработать данные в таком формате? А если необходимо этот атрибут в файле изменить?
Столкнувшись с этой проблемой, я решил разработать класс, позволяющий конвертировать FileTime
в LocalDateTime
и обратно. При конвертации используются настройки операционной системы по умолчанию, но при желании этот код можно легко изменить под локальную задачу. Предлагаю вашему вниманию свое решение:
public class FileDateTimeChange { static public LocalDateTime readDateTime(Path path) { //метод читает дату и время обновления файла по path //и конвертирует ее в LocalDateTime //с учетом настроек операционной системы по умолчанию try { LocalDateTime datetime = Files.getLastModifiedTime(path) .toInstant() .atZone(ZoneId.systemDefault()) .toLocalDateTime(); return datetime; } catch (IOException e) { return null; } } static public FileTime convertLocalDateTime(LocalDateTime dateTime) { //метод конвертирует LocalDateTime dateTime в формат FileTime ZoneId systemZone = ZoneId.systemDefault(); ZoneOffset zoneOffset = systemZone.getRules().getOffset(dateTime); Instant instant = dateTime.toInstant(zoneOffset); FileTime fileTime = FileTime.from(instant); return fileTime; } }
Андрей Кадыров, после окончания базового курса, июль 2020