我想将 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 评论编辑。
ZoneId.systemDefault()
没有问题,因为时区在一年中会发生变化。因此,如果在 1 月 1 日我在时区 -05:00(中央),但是在 7 月 1 日我在时区 -06:00(中央日光)不会因为夏令时而导致不准确的结果时间?
免责声明:仅用于说明现有的 java api。不应在生产代码中使用。
您可以将 java.sql.Date.valueOf()
方法用作:
Date date = java.sql.Date.valueOf(localDate);
无需在此处添加时间和时区信息,因为它们是隐含的。
请参阅LocalDate to java.util.Date and vice versa simplest conversion?
java.sql.Date
用于数据库层、JDBC、JPA。 Web 层(或任何客户端应用程序)绝对不应依赖于 java.sql.*
。
java.sql.Date
只是时间设置为 00:00:00
的 java.util.Date
,但从设计的角度来看,java.sql.*
并不适用于客户端与之交互的前端层,例如 Servlets/JSP。 java.util.Date
in Java side and java.sql.Timestamp
or whatever applicable from java.sql.*
in JDBC side。
java.sql.*
中,类将是一个单独的依赖项。
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.util.Date d = new SimpleDateFormat("yyyy-MM-dd").parse(localDate.toString());
https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#toString--
为了从 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);
toEpochSecond
继承自 java.time.chrono.ChronoZonedDateTime
。请参阅docs.oracle.com/javase/8/docs/api/java/time/chrono/…
Kotlin 解决方案:
1)将此扩展功能粘贴到某处。
fun LocalDate.toDate(): Date = Date.from(this.atStartOfDay(ZoneId.systemDefault()).toInstant())
2)使用它,永远不要再用谷歌搜索它。
val myDate = myLocalDate.toDate()
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
}
localDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
尝试这个:
public Date convertFrom(LocalDate date) {
return Date.valueOf(date);
}
简单的
public Date convertFrom(LocalDate date) {
return java.sql.Timestamp.valueOf(date.atStartOfDay());
}
java.util.Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
不定期副业成功案例分享
atStartOfDay()
,因为它会更改日期的值。