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