2016-10-24 6 views
1

Как преобразовать экземпляр java.time.temporal.Temporal в экземпляр java.util.Date?Преобразование java.time.temporal.Temporal в java.util.Date

java.time.temporal.Temporal someTemporal = Instant.now(); 
java.util.Date some Temporal = x(someTemporal); 

Я принял взглянуть на Oracle's legacy time trail documentation, но не смог найти решение, которое подходит.

+2

Тип 'Temporal' является настолько общим и абстрактным, что почти невозможно найти решение, то есть преобразование в' java.util.Date'. Рассмотрим, например, тип 'LocalDate'. Как вы можете преобразовать его без какой-либо контекстной информации, такой как часовой пояс или часы? –

+1

Однако, если вы просто хотите конвертировать 'java.time.Instant', то это довольно просто. Посмотрите на API 'java.util.Date'. (см. метод 'from (Instant)'). –

ответ

-1

В нижней части она имеет:

Хотя java.time.format.DateTimeFormatter обеспечивает мощный механизм для форматирования значений даты и времени, вы можете также использовать java.time временные на основе классов непосредственно java.util.Formatter и String.format, используя такое же форматирование на основе шаблонов, которое вы используете с классами даты и времени java.util.

Похоже, что вы можете использовать класс DateTimeFormatter с documentation here и, возможно, происходит что-то вроде этого примера:

LocalDate date = LocalDate.now(); 
String text = date.format(formatter); 
LocalDate parsedDate = LocalDate.parse(text, formatter); 
+2

Я думаю, что речь идет не о форматировании. –

+0

@MenoHochschild правильно, и мой ответ предоставляет ему LocalDate, который является форматом Date и может быть преобразован в объект java.util.Date. –

+1

@TrevorYokum Вопрос о преобразовании в java.util.Date. Ваш ответ не имеет ничего общего с этим ... – assylias

4

я настоятельно рекомендую, чтобы оставить любую ссылку на (тоже) вообще интерфейс java.time.temporal.Temporal и просто сделать это:

java.util.Date some = java.util.Date.from(Instant.now()); 

Использование интерфейса Temporal почти как с помощью java.lang.Object. Вы должны быть максимально конкретными (особенно в контексте даты и времени). Даже JSR-310-API officially outputs a warning:

Этот интерфейс представляет собой интерфейс рамки уровня, который не должен быть широко используется в коде приложения. Вместо этого приложения должны создавать и передавать примеры конкретных типов, таких как LocalDate. Там есть много причин для этого, часть из которых заключается в том, что реализации этот интерфейс может быть в календарных системах, отличных от ISO. См. ChronoLocalDate для более полного обсуждения проблем.

0

Я думаю, вы задали этот вопрос немного неправильно. Скорее, я считаю, что вы хотите. Как преобразовать какой-либо конкретный класс java.time, например. Instant, LocalDate, в Date с использованием общего интерфейса. TemporalAccessor Я считаю, что интерфейс.

@Test 
public void convertTemportalAccessorTypeToDate() throws Exception { 
    Instant instant = Instant.now(); 
    Date expected = Date.from(instant); 
    TemporalAccessor now = instant; 

    long nanos = now.getLong(ChronoField.NANO_OF_SECOND); 
    long epochSeconds = now.getLong(ChronoField.INSTANT_SECONDS); 
    Date date1 = Date.from(Instant.ofEpochSecond(epochSeconds, nanos)); 
    assertThat(date1, is(expected)); 
} 

что сказал, конкретный тип на самом деле должен поддерживать ChronoField, и, кажется, бросить UnsupportedTemporalTypeException, если это не так, может быть, завернуть в попытке поймать.

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