簡體   English   中英

將 java.time.LocalDate 轉換為 java.util.Date 類型

[英]Convert java.time.LocalDate into java.util.Date type

我想將java.time.LocalDate轉換為java.util.Date類型。 因為我想將日期設置為JDateChooser 或者是否有支持java.time日期的日期選擇器?

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

假設您的日期選擇器使用系統默認時區將日期轉換為字符串。

這是我用來將較新的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 評論編輯。

免責聲明:僅用於說明現有的 java api。 不應在生產代碼中使用。

您可以使用java.sql.Date.valueOf()方法作為:

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

無需在此處添加時間和時區信息,因為它們是隱式獲取的。
看到LocalDate 到 java.util.Date 反之亦然最簡單的轉換?

java.time 具有 Temporal 接口,您可以使用它從大多數時間類創建 Instant 對象。 Instant 表示 Epoch 中時間軸上的毫秒數 - 所有其他日期和時間的基本參考。

我們需要將 Date 轉換為 ZonedDateTime,帶有 Time 和 Zone,以進行轉換:

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

為了從java.time.LocalDate創建java.util.Date ,您必須

  • LocalDate添加時間
  • 解釋時區內的日期和時間
  • 獲取自紀元以來的秒數/毫秒數
  • 創建一個java.util.Date

代碼可能如下所示:

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

這對我有用:

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

科特林解決方案:

1) 將此擴展功能粘貼到某處。

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

2)使用它,永遠不要再谷歌這個。

val myDate = myLocalDate.toDate()
localDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
public static Date convertToTimeZone(Date date, String tzFrom, String tzTo) {
    return Date.from(LocalDateTime.ofInstant(date.toInstant(), ZoneId.of(tzTo)).atZone(ZoneId.of(tzFrom)).toInstant());
} 
    LocalDate date = LocalDate.now();
    DateFormat formatter = new SimpleDateFormat("dd-mm-yyyy");
    try {
        Date utilDate= formatter.parse(date.toString());
    } catch (ParseException e) {
        // handle exception
    }

嘗試這個:

public Date convertFrom(LocalDate date) {
    return Date.valueOf(date);
}

簡單的

public Date convertFrom(LocalDate date) {
    return java.sql.Timestamp.valueOf(date.atStartOfDay());
}

這個解決方案有點長,你可以在這里包含一些東西,但據我了解你的問題,你只需要實際的日期。

int day = this.datePicker2.getDate().getDayOfMonth();
int month = this.datePicker2.getDate().getMonthValue();
int year = this.datePicker2.getDate().getYear();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month-1);
calendar.set(Calendar.DATE, day);
Date date = calendar.getTime();

可能看起來不那么優雅但它有效。 注意:使用month-1是因為日歷中的月份從0開始。

java.util.Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM