2016-06-10 22 views
0

Ich schreibe gerade eine Anwendung, wo ich überprüfen muss, ob es irgendwelche Dateien gab, die vor gestern erstellt wurden, und sie bereinigen. Im Moment, wenn ich versuche die folgenden:Java8 und Sommerzeit

LocalDateTime today = LocalDate.now().atStartOfDay(); 
long todayEpoch = today.atZone(ZoneId.of("Europe/London")).toEpochSecond() * 1000; 

und wandeln die Millisekunden zurück zu einem Date (auf jedem Online-Millisekunden bisher Konverter) es sagt mir, ich bin 1 Stunde zurück.

Dies ist wegen Daylight Savings Time, was bedeutet, dass wir GMT + 1: 00 sind, was wahrscheinlich die 1 Stunde Unterschied erklärt.

Um dies zu lösen, ich, wie unten zu tun hatte die Zone Id zu UTC ändern:

final LocalDateTime today = LocalDate.now().atStartOfDay(); 
long todayEpoch = today.atZone(ZoneId.of("UTC")).toEpochSecond() * 1000; 

Aber ich bin immer noch verwirrt, wie es funktioniert.

Kann jemand erklären warum?

+1

Wie erhalten Sie das Datum der Dateierstellung? Wenn das Dateien auf der Festplatte sind, warum nicht ein 'FileTime'-Objekt verwenden, das mit' Files.readAttributes (Pfad, BasicFileAttributes.class) .creationTime() '? Daraus ergibt sich ein 'Instant', den man mit' Instant.now(). MinusDays (1) 'vergleichen kann, es gibt keine Zeitzonen. – Tunaki

Antwort

1
LocalDateTime today = LocalDate.now().atStartOfDay(); 

kehrt heute (in Ihrer Zeitzone) um 00:00 Uhr zurück. Wenn also heute der 10. Juni 2016 ist, wird 2016-06-10 00:00 zurückgegeben.

today.atZone(ZoneId.of("Europe/London")) 

fügt die Zeitzoneninformationen zu dem Datum, das wird: 2016-06-10 00:00 Europe/London, die als 2016-06-09 23:00 UTC aufgrund der britischen Sommerzeit im selben Augenblick ist.

Sie rufen dann die Epochensekunden ab. Dies ist die Anzahl der Sekunden, die zwischen dem 1. Januar 1970 um 00:00 UTC und diesem Zeitpunkt vergangen sind. In Ihrem zweiten Beispiel berechnen Sie die Millis zwischen der Epoche und 2016-06-10 01:00 Europe/London oder 2016-06-10 00:00 UTC.

Sie müssen entscheiden, was Sie wollen.

+0

Danke @assylias für die detaillierte Erklärung. Es beginnt jetzt Sinn zu machen. –