Во время обучения на базовом курсе 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
