it编程 > 软件设计 > 设计模式

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

94人参与 2024-08-04 设计模式

在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)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

教程|使用 TeamCity 为 Android 项目构建 CI/CD 管道

08-04

HGDD 荣耀开发者日丨沙龙北京站报名开启

08-04

天下拍-为您提供拍卖业务的一揽子解决方案

08-04

openHarmony 安装以及常用组件

08-04

蚂蚁 CodeFuse 下一步,探索智能问答,图生代码等场景

08-04

借助 NGINX Plus 优化企业环境中的 MQTT 部署

08-04

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论