it-swarm.com.ru

Преобразуйте Java.time.LocalDate в тип Java.util.Date.

Я хочу преобразовать Java.time.LocalDate в Java.util.Date тип. Потому что я хочу установить дату в JDateChooser. Или есть какой-либо выбор даты, который поддерживает Java.time даты?

303
Kavinda Gehan
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

Это предполагает, что ваш выбор даты использует системный часовой пояс по умолчанию для преобразования дат в строки.

480
JB Nizet

Вот вспомогательный класс, который я использую для преобразования новых классов Java.time в объекты Java.util.Date и наоборот:

import Java.time.Instant;
import Java.time.LocalDate;
import Java.time.LocalDateTime;
import Java.time.ZoneId;
import Java.util.Date;

public class DateUtils {

  public static Date asDate(LocalDate localDate) {
    return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
  }

  public static Date asDate(LocalDateTime localDateTime) {
    return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
  }

  public static LocalDate asLocalDate(Date date) {
    return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();
  }

  public static LocalDateTime asLocalDateTime(Date date) {
    return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
  }
}

Отредактировано на основе комментария @Oliv.

91
Brice Roncace

Вы можете использовать метод Java.sql.Date.valueOf() как:

Date date = Java.sql.Date.valueOf(localDate);

Нет необходимости добавлять информацию о времени и часовом поясе здесь, потому что они взяты неявно.
См. LocalDate to Java.util.Date и наоборот самое простое преобразование?

82
George

Java.time имеет интерфейс Temporal, который вы можете использовать для создания объектов Instant из большинства классов времени. Мгновенный представляет миллисекунды на временной шкале в эпоху - базовую ссылку для всех других дат и времени.

Нам нужно преобразовать дату в ZonedDateTime с указанием времени и зоны, чтобы выполнить преобразование:

LocalDate ldate = ...;
Instant instant = Instant.from(ldate.atStartOfDay(ZoneId.of("GMT")));
Date date = Date.from(instant);
14
Kevin Sadler

Чтобы создать Java.util.Date из Java.time.LocalDate, необходимо

  • добавить время к LocalDate
  • интерпретировать дату и время в пределах часового пояса
  • получить количество секунд/миллисекунд с момента эпоха
  • создать Java.util.Date

Код может выглядеть следующим образом:

LocalDate localDate = LocalDate.now();
Date date = new Date(localDate.atStartOfDay(ZoneId.of("America/New_York")).toEpochSecond() * 1000);
12
nosid

Это работает для меня:

Java.util.Date d = new SimpleDateFormat("yyyy-MM-dd").parse(localDate.toString());

https://docs.Oracle.com/javase/8/docs/api/Java/time/LocalDate.html#toString--

11
ceklock

Решение Kotlin:

1) Вставьте эту функцию расширения куда-нибудь.

fun LocalDate.toDate(): Date = Date.from(this.atStartOfDay(ZoneId.systemDefault()).toInstant())

2) Используйте его, и никогда не гуглите это снова.

val myDate = myLocalDate.toDate()
3
gyoder