В настоящее время я пишу приложение, в котором мне нужно проверить, были ли какие-либо файлы, созданные до вчерашнего дня, и очистить их. В тот момент, когда я пробую следующее:
LocalDateTime today = LocalDate.now().atStartOfDay();
long todayEpoch = today.atZone(ZoneId.of("Europe/London")).toEpochSecond() * 1000;
и преобразовать миллисекунды обратно в дату (в любом онлайн-конвертере миллисекунды в дату), он говорит мне, что я отстаю на 1 час.
Это связано с переходом на летнее время, а это означает, что сейчас время по Гринвичу + 1: 00, что, вероятно, объясняет разницу в 1 час.
Чтобы решить эту проблему, мне пришлось изменить идентификатор зоны на UTC, как показано ниже:
final LocalDateTime today = LocalDate.now().atStartOfDay();
long todayEpoch = today.atZone(ZoneId.of("UTC")).toEpochSecond() * 1000;
Но я все еще не понимаю, как это работало.
Может кто-нибудь объяснить, почему?
FileTime
, полученный с помощьюFiles.readAttributes(path, BasicFileAttributes.class).creationTime()
? Таким образом, вы получаетеInstant
, который можно сравнить сInstant.now().minusDays(1)
, без учета часовых поясов. - person Tunaki   schedule 10.06.2016