2014-03-19 5 views
1

Я использую java8 DatePicker (и мне это нравится).java8; как установить java.time.LocalDate, используя (значение) java.util.Date

Этот класс использует java.time.LocalDate. Persistence с другой стороны использует (исключительно в MAR 2014) java.util.Date. LocalDate2Date участвует, но выполнимо (см. Ниже) , но я не могу найти способ сделать Date2LocalDate.

.... 
entityClassFromDatabase.setDate2b(LocalDate2Date(datepicker.getvalue())); 
.... 
} 

private java.util.Date LocalDate2Date(LocalDate localDate) { 
    [validation code omitted] 
    ChronoLocalDateTime cldt = localDate.atStartofDay(); 
    Instant instant = cldt.toInstant(ZoneOffset.from(Instant.now().atZone(ZoneId.systemDefault()))); 
    return Date.from.(instant); 
} 

Что мне нужно, это что-то типа;

datepicker.setvalue(Date2LocalDate(entityClassFromDatabase.getDate2b()); 

Я видел ответы, которые предлагают новый LocalDate (дата); и варианты, но они не работают;

Последние усилия были «преобразования» via java.time.Instant но хотя «момент», используемого в LocalDate2Date распечатывает идентичных момент используется ниже:

Instant instant = entityClassFromDatabase.getDate2b.toinstant(); 
LocalDateTime xx = LocalDateTime.from(instant); 

бросает исключение ниже:

java.time.DateTimeException: Unable to obtain LocalDateTime from TemporalAccessor: 2014-03-27T23:00:00Z of type java.time.Instant 

Я утеряны

+1

если посмотреть на преобразование из java.util.Date в LocalDate затем посмотреть на эту [SO-ITEM] (HTTP: // stackoverflow.com/questions/21242110/convert-java-util-date-to-java-time-localdate). –

+2

Пожалуйста, изучите соглашения об именах Java (методы всегда должны начинаться с буквы в нижнем регистре). – ryvantage

ответ

2

Использование:

public LocalDate dateToLocalDate(final Date date) 
{ 
    return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()) 
     .toLocalDate(); 
} 

Однако, как уже упоминалось, у этого больше нет информации о часовом поясе.

Javadoc говорит об этом методе:

Получает экземпляр LocalDateTime из зоны мгновенного и ID.

Это создает локальную дату-время на основе указанного момента. Во-первых, смещение от UTC/Greenwich получается с использованием идентификатора зоны и моментального момента, что просто, поскольку для каждого момента есть только одно допустимое смещение. Затем время и смещение используются для вычисления локального времени.

+0

Я думаю, что OP хочет обратное преобразование, или я что-то неправильно понял? –

+0

Ну, OP говорит: «LocalDate2Date задействован, но выполним (см. Ниже), но я не могу найти способ сделать Date2LocalDate». – fge

+0

Хорошо, тогда моя ошибка чтения, на английском Я не так много на безопасной почве, извините. Удалит мой ответ. –

0

Вы также можете пройти в вашем часовом поясе, как -

LocalDateTime localDateTime = LocalDateTime.from(new Date().toInstant().atZone(ZoneId.of("UTC")));

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