2015-08-14 5 views
13

Sono nuovo nel pacchetto java.time. Ho un LocalDate 2015-12-10. Devo convertire questo in ZonedDateTime. L'orario dovrebbe essere 00:00:00 e Zone ZoneOffset.UTC.Java 8 - Converti LocalDate in ZonedDateTime

Dopo la conversione, ZonedDateTime dovrebbe essere 2015-12-10T00: 00: 00 + 02: 00.

Sto memorizzando il LocalDate in una variabile denominata startDate.

ho provato:

ZonedDateTime.ofInstant(Instant.from(startDate), ZoneOffset.UTC) 

ma ottiene l'errore

java.time.DateTimeException: Impossibile ottenere immediata da TemporalAccessor: 2015/12/10 di tipo java.time.LocalDate]

ho anche provato:

startDate.atStartOfDay().atZone(ZoneOffset.UTC) 

Questo dà risultati inaspettati.

Ho guardato l'API e ho provato alcuni altri metodi, ma finora non ho avuto fortuna.

Esiste un altro modo per convertire LocalDate in ZonedDateTime?

+1

Perché ti aspetti che lo scostamento di zona sia +02: 00? – Misha

+1

Se si desidera un ZonedDateTime, è necessario un ZoneId. Non solo un ZoneOffset. E la tua domanda non ha molto senso. Per prima cosa dici di volerlo al fuso orario UTC e poi dici che dovrebbe essere il 2015-12-10T00: 00: 00 + 02: 00. Se è 02: 00, non è UTC. UTC è +00: 00. Se quello che vuoi è un orario con un offset UTC fisso, dovresti usare un OffsetDateTime: 'OffsetDateTime offsetDateTimeDateTime = date.atStartOfDay(). AtOffset (ZoneOffset.ofHours (2));' –

+1

Le mie scuse: ZoneOffset estende ZoneId, quindi questo ti restituirà un ZonedDateTime. Il resto del mio commento è ancora valido. –

risposta

24

Durante la conversione di oggetti meno specifiche a quelle più specifiche, utilizzare la 'a' metodi:

ZonedDateTime zdt = startDate.atStartOfDay(ZoneOffset.UTC); 

Passando nella traslazione non sarà possibile ottenere un risultato di 02 UTC: 00 tuttavia, che vi suggerisce stanno cercando per ottenere qualcos'altro.