Nel java.time quadro di Java 8 e versioni successive, la classe Duration
dice:Durata non supporta GIORNI contraria alla documentazione relativa alla classe
Questa classe modelli una quantità o quantità di tempo in termini di secondi e nanosecondi. È possibile accedervi utilizzando altre unità basate sulla durata, ad esempio minuti e ore. Inoltre, l'unità
DAYS
può essere utilizzata e viene considerata esattamente uguale a 24 ore, ignorando così gli effetti dell'ora legale.
Eppure, quando chiamo il metodo get
e passo ChronoUnit.DAYS
, viene generata un'eccezione.
LocalTime start = LocalTime.of (0 , 0 , 0); // First moment of the day.
LocalTime stop = LocalTime.of (2 , 0 , 0); // 2 AM.
Duration duration = Duration.between (start , stop);
long days = duration.get (ChronoUnit.DAYS);
Exception in thread java.time.temporal.UnsupportedTemporalTypeException "principale": Unità non supportata: Giorni
Perchè sono malinteso qualcosa, o uso improprio delle classi?
Per quanto mi ricordo le uniche costanti '' ChronoUnit'' che funzionano in '' Duration.get (...) '' sono '' SECONDS'' e '' NANOS'', ma non ho mai scoperto perché. – f1sh
@ f1sh Perché? È a causa dello stato interno di 'Durata' che contiene solo secondi e nanosecondi. Il metodo 'get (TemporalField)' è progettato per fornire una ** quantità ** parziale in base allo stato interno. Al contrario, 'toDays()' cerca di determinare l'importo ** intero ** convertito in giorni su base 1d = 24h. –
Ho un errore di battitura nel mio commento precedente. Invece di dire 'get (TemporalField)' Volevo dire: get (TemporalUnit) '. –