2015-04-15 34 views
5

Ho un modello di stringa per un formattatoreCome formattare la data con fuso orario nella stringa del modello in java.time?

yyyy-MM-dd HH:mm:ss Z 

Come fare il parsing di un java.util.Date utilizzando questo schema?

Il problema è il fuso orario già in questo schema.

String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss Z"; 

DateTimeFormatter.ofPattern(DATE_TIME_FORMAT).format(date.toInstant()); 

Questo dà apparentemente

java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: YearOfEra 
    at java.time.Instant.getLong(Instant.java:603) 
    at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298) 

le soluzioni qui e in altri luoghi non ha fuso orario nelle soluzioni format string e di offrire come:

DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.ofInstant(dateD.toInstant(), ZoneId.systemDefault())) 

Posso in qualche modo analizzarlo ?

risposta

6

Un Instant does not have the notion of year of era:

I campi supportati sono:

  • NANO_OF_SECOND
  • MICRO_OF_SECOND
  • MILLI_OF_SECOND
  • INSTANT_SECONDS

È possibile utilizzare uno ZonedDateTime invece:

ZonedDateTime zdt = date.toInstant().atZone(ZoneOffset.UTC); 
String format = DateTimeFormatter.ofPattern(DATE_TIME_FORMAT).format(zdt); 
Problemi correlati