2016-05-27 4 views
6

Sto provando a formattare Instant in String con un formato specifico. In base alla domanda qui Format Instant to String, sto facendo questo -Formattazione da Instant a String con pattern specifico

DateTimeFormatter formatter = DateTimeFormatter 
     .ofPattern("YYYY-MM-DD'T'hh:mm'Z'") 
     .withZone(ZoneOffset.UTC); 

// Fails for current time with error 'Field DayOfYear cannot be printed as the 
// value 148 exceeds the maximum print width of 2' 
LocalDateTime 
     .ofInstant(Instant.now(), ZoneOffset.UTC) 
     .format(DATE_TIME_FORMATTER); 

// But works for smaller values of Instant  
LocalDateTime 
    .ofInstant(Instant.ofEpochMilli(604800000), ZoneOffset.UTC) 
    .format(DATE_TIME_FORMATTER)); 

Tutti i suggerimenti su perché sta succedendo questo?

Grazie

+5

D non è la stessa di d. –

+0

oh uomo ... ho perso un sacco di tempo. Thnx! – RandomQuestion

+0

Non hanno una traccia di eccezione migliore :-( – prash

risposta

11

modello YYYY-MM-DD'T'hh:mm'Z' è sbagliato:

  • YYYY - settimana a base di anno       sbagliato: utilizzare uuuuanni
  • MM - mese d'anno
  • DD - giorno anno       sbagliato: utilizzare ddgiorni-di-mese
  • hh - orologio ore-di-am-pm (1-12)       senza AM/PM che probabilmente vuole HHora del giorno (0-23)
  • mm - minuto di ore

E 'strano, perché anche riferimento a un link che aveva i caratteri del modello giusto. A meno che non abbiate pensato che la differenza tra maiuscole e minuscole non fosse importante, ma in tal caso, come pensava che lo (mese) rispetto allo mm (minuto) funzionasse?

Si potrebbe effettivamente leggere il documentation.

2

Date un'occhiata alla documentazione della DateTimeFormatter. Quindi, D sta per il giorno dell'anno, mentre d è il giorno del mese, che è ciò che desideri.

Inoltre, esistono diversi formati già definiti. Quello che vuoi è quasi come DateTimeFormatter.ISO_INSTANT.