Non eseguire i propri calcoli di data e ora. Il lavoro in ufficio è un affare sorprendentemente difficile. Hai già eseguito l'errore int
-versus- long
comune con il calcolo dei millisecondi. Utilizzare una libreria data-decente decente. Fortunatamente Java ora viene fornito con la migliore libreria del settore.
java.time
Come accennato in the correct Answer by rgettman, si dovrebbe utilizzare il nuovo quadro java.time integrato in Java 8 e versioni successive. Le vecchie lezioni di data-ora in bundle con le prime versioni di Java sono notoriamente fastidiose.
Nozioni di base su java.time ... Un Instant
è un momento sulla timeline in UTC. Applicare un fuso orario (ZoneId
) per ottenere un ZonedDateTime
.
Il fuso orario è fondamentale per determinare le date, poiché la data non è la stessa in tutto il mondo in qualsiasi momento. Un nuovo giorno sorge prima nell'est.
Instant instant = Instant.now(); // In UTC.
ZoneId zoneId = ZoneId.of("Asia/Kolkata");
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant , zoneId);
ZonedDateTime zdtTwentyFiveDaysAgo = zdt.minusDays(25);
Si consiglia il primo momento della giornata per quella data in tempo di 25 giorni fa piuttosto poi il giorno tempo di corrente. Il primo momento non è sempre 00:00:00.0
a causa dell'ora legale (DST) e forse altre anomalie. Quindi lascia che java.time determini l'ora del giorno. Dobbiamo passare attraverso LocalDate
e poi tornare a ZonedDateTime
per ottenere il primo momento.
ZonedDateTime zdtTwentyFiveDaysAgoStart = zdtTwentyFiveDaysAgo.toLocalDate().atStartOfDay(zoneId);
fonte
2016-01-22 23:28:18
vi consiglio di andare oltre il [nuovo tutorial di dati in tempo] (http://docs.oracle.com/javase/tutorial/datetime/index.html). – user1803551