Java各类日期和时间转换(Date转LocalDateTime)

原创
2024/08/02 09:35
阅读数 62

在Java开发中,日期和时间的处理随着JDK的迭代发展经历了几个阶段,从最初的java.util.Date和java.util.Calendar到Java 8(java.time包下的类)引入全新的日期时间API。现今在Java中,JDK提供了多种日期和时间相关类,主要包括以下几种:

java.util.Date:这是Java最早提供的日期和时间类表示特定的时间瞬间,精确到毫秒。可以通过System.currentTimeMillis()来获取当前时间的毫秒表示。
java.sql.Date:这是为数据库应用设计的日期类,只包含年、月、日信息,不包含时间和时区信息。
java.sql.Time:类似java.sql.Date,但它只包含小时、分钟和秒信息。
java.sql.Timestamp:这是一个比java.util.Date更加精确的时间戳类,它可以精确到纳秒级别。
java.util.Calendar和java.util.GregorianCalendar:Calendar是一个抽象类,提供了日期和时间的计算方法。GregorianCalendar是Calendar的一个具体实现,用于处理公历(格里高利历)。
java.time包中的类:在Java 8及以上版本,推荐使用java.time包中的类来处理日期和时间,因为它们设计更加合理且功能更加强大。主要类包括LocalDate、LocalTime、LocalDateTime、ZonedDateTime、Instant、Duration、Period等。
  现在,让我们来看一下这些日期对象之间的转换:

java.util.Date转换为java.sql.Date
java.util.Date date = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(date.getTime());

java.util.Date转换为java.sql.Time
java.util.Date date = new java.util.Date();
java.sql.Time sqlTime = new java.sql.Time(date.getTime());

java.util.Date转换为java.sql.Timestamp
java.util.Date date = new java.util.Date();
java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(date.getTime());

java.util.Calendar转换为java.util.Date
java.util.Calendar calendar = java.util.Calendar.getInstance();
java.util.Date date = calendar.getTime();

java.util.Date转换为java.util.Calendar
java.util.Date date = new java.util.Date();
java.util.Calendar calendar = java.util.Calendar.getInstance();
calendar.setTime(date);

java.time.LocalDateTime转换为java.util.Date
java.util.Date date = new java.util.Date();

LocalDate localDate = date.toInstant()
    .atZone(ZoneId.systemDefault()).toLocalDate();

LocalDateTime localDateTime = date
    .toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();

LocalTime localTime = date
    .toInstant().atZone(ZoneId.systemDefault()).toLocalTime();

// 从java.time.LocalDate转换为java.util.Date
Date date1 = Date.from(localDate.atStartOfDay()
                    .atZone(ZoneId.systemDefault()).toInstant());
Date date2 = Date.from(localDateTime
                    .atZone(ZoneId.systemDefault()).toInstant());

java.time计算时间差
LocalDateTime beforeLocalDateTime = LocalDateTime.of(2024,4,1,8,5,1);
LocalDateTime afterLocalDateTime = LocalDateTime.of(2024,5,1,8,5,1);

// 时间差—天
long diffDays = ChronoUnit.DAYS.between(beforeLocalDateTime, afterLocalDateTime);
// 时间差-小时
long diffHours = ChronoUnit.HOURS.between(beforeLocalDateTime, afterLocalDateTime);
// 时间差-分钟
long diffMinutes = ChronoUnit.MINUTES.between(beforeLocalDateTime, afterLocalDateTime);
// 时间差-秒钟
long diffSeconds = ChronoUnit.SECONDS.between(beforeLocalDateTime, afterLocalDateTime);

java.util.Date计算时间差
Date beforeDate = new Date();
// 当前时间后一天
Date afterDate = new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24);

// 将Date对象转换为Calendar对象
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(date1);

Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(date2);

// 计算两个时间相差的天数
int diffDays = calendar2.get(Calendar.DAY_OF_YEAR) -
        calendar1.get(Calendar.DAY_OF_YEAR);

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部