TIPS:Java各类日期和时间转换(Date转LocalDateTime),看这一篇就够了

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

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

  现在,让我们来看一下这些日期对象之间的转换:

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);
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐只乐之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值