2016-05-27 11 views
6

Próbuję sformatować Instant na String w określonym formacie. Na podstawie tutaj Format Instant to String pytanie, robię to -Formatowanie natychmiastowe na ciąg o określonym wzorze

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)); 

Wszelkie sugestie, dlaczego tak się dzieje?

Dzięki

+5

D to nie to samo co d. –

+0

o człowieku ... po prostu zmarnowałeś dużo czasu. Thnx! – RandomQuestion

+0

Cant mają lepszy ślad śledzenia :-( – prash

Odpowiedz

11

Wzór YYYY-MM-DD'T'hh:mm'Z' jest źle:

  • YYYY - tydzień oparte roku       źle: użyj uuuuroku
  • MM - miesiąc od roku
  • DD - dzień -of-year       źle: użyj dddzień-of-miesiąca
  • hh - zegar-godzin-of-am-pm (1-12)       bez AM/PM prawdopodobnie chcesz HHgodziny-of-day (0-23)
  • mm - minuta-of-godziny

To dziwne, bo nawet odwoływać link, który miał prawo znaki wzorca. O ile oczywiście nie myślałeś, że górna i mała sprawa nie mają znaczenia, ale jeśli tak, to w jaki sposób zadziałało MM (miesiąc) kontra mm (minuta)?

Być może zechcesz przeczytać numer documentation.

2

Spójrz na dokumentacji DateTimeFormatter. Tak więc D oznacza dzień roku, natomiast d jest dniem miesiąca, który jest tym, co chcesz.

Dodatkowo istnieje kilka formatów, które są już zdefiniowane. Ten, który chcesz, jest prawie jak DateTimeFormatter.ISO_INSTANT.

Powiązane problemy