2014-09-12 5 views
3

Я использую ThreeTen и пытаюсь отформатировать Instant. Было бы проще просто разбить его, но мне любопытно, должна ли эта работа? Из всего, что я прочитал мгновенных должен быть синтаксический-состоянии, и со всеми компонентами узора:ThreeTen и разобрать мгновение

@Test 
public void testInstants() { 
    Instant instant = Instant.now(); 
    String dbDatePattern = "YYYY-MM-dd HH:mm:ss.SSS"; 
    try { 
     DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dbDatePattern); 
     String dbDate = formatter.format(instant); 
    } catch (Exception ex) { 
     int dosomething = 1; 
    } 
} 

Ошибка: org.threeten.bp.temporal.UnsupportedTemporalTypeException: неподдерживаемых поле: DayOfWeek

дд это день месяца не DayofWeek. Вероятно, забрасывают красную селедку, но это кажется странным.

ответ

3

Образец буквы «Y» означает недельный год в ThreeTen-Backport и JSR-310 (это означало, что в эпоху Йода это время года). Чтобы рассчитать недельный год, необходим день недели, следовательно, ошибка.

Обратите внимание, что Instant не может предоставить поля для форматирования, который вы пытаетесь создать. Только ZonedDateTime, LocalDateTime или OffsetDateTime может. Instant - это специальный случай, который должен быть отформатирован с использованием DateTimeFormatter.ISO_INSTANT или аналогичного.

1

Для того, чтобы ответить Явные JodaStephen в:

String dbDatePattern = "YYYY-MM-dd HH:mm:ss.SSS"; (прописные YY)

должен быть

String dbDatePattern = "yyyy-MM-dd HH:mm:ss.SSS"; (строчный гггг)

вместо этого.

Кроме того, вместо

Instant instant = Instant.now();

сделать

LocalDateTime localDateTime = LocalDateTime.now();

..., а затем передать, что format() вместо этого.

Так как Instant и LocalDateTime реализации TemporalAccessor, что и DateTimeFormatter.format() принимает, остальная часть кода должна работать как есть.

Смежные вопросы