当前位置: 首页 > news >正文

java 之 各类日期格式转换

一、前言

大家在开发过程中必不可少得和日期打交道,对接别的系统时,时间日期格式不一致,每次都要转换!
从 Java1 到 Java8 将近 20 年,再加上 Java8 的普及时间、各种历史 API 兼容过渡时间。我们很多时候需要在旧时间 API 与新时间 API 之间切换,并行使用!!!
每次写完就忘记了,小编专门来整理一篇来详细说一下他们转换的方法,方便后面使用!!

二、日期格式转换

LocalDateTime 和 Date 互相转换

Date 转 LocalDateTime

Java8 发行的时候,也考虑到了新旧 API 之间的转换,所以在java.util.Date中增加了toInstance()方法,可以得到一个Instance实例。Instance没有时区概念,所以我们需要通过atZone()指定时区,得到ZonedDateTime实例,然后转换为java.time.LocalDate

如下:

Date dateNow = new Date();
LocalDateTime localDateTime = dateNow.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()

同样的,我们也可以借助Instance的ofEpochMilli()方法创建实例。如下:

Date dateNow = new Date();
LocalDateTime localDateTime = Instant.ofEpochMilli(dateNow.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime()
}

Date转LocalDate、LocalTime的原理同上。
java.util.Date是包含年月日时分秒的,转为java.time.LocalDateTime是精度保留,转为java.time.LocalDate是把时分秒去掉,转换方式完全一样,只不过要用到的是toLocalDate()方法和toLocalTime()方法。

LocalDateTime 转 Date

同理,可得LocalDate、LocalTime转Date的方法。

LocalDateTime localDateTime = LocalDateTime.now()
Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());

LocalDateTime 和 String 互相转换

LocalDateTime 转 String

LocalDate类有一个format()方法,可以将日期转成字符串。format()方法需要一个DateTimeFormatter对象作为参数。

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String dateTimeStr = LocalDateTime.now().format(dateTimeFormatter);

String 转 LocalDateTime

我们可以使用parse()方法从字符串中解析日期对象

String dateTimeStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
LocalDateTime localDateTime = LocalDateTime.parse(dateTimeStr);

LocalDateTime 和 Instant 互相转换

LocalDateTime表示没有时区的日期时间,如2019-10-25T12:15:30,而Instant是时间线上的一个瞬时点。

LocalDateTime 转 Instant

LocalDateTime localDateTime = LocalDateTime.now();Instant instant;
//第一种方式:Using LocalDateTime.toInstant()
instant = localDateTime.toInstant(ZoneOffset.UTC);//第二种方式:Using LocalDateTime.atZone() and Instant.atZone()
instant =localDateTime.atZone(ZoneId.systemDefault()).toInstant();//第三种方式:Using LocalDateTime.toEpochSecond() and Instant.ofEpochSecond()
long timeInSeconds = localDateTime.toEpochSecond(ZoneOffset.UTC);
instant = Instant.ofEpochSecond(timeInSeconds);

Instant 转 LocalDateTime

//Using LocalDateTime.ofInstant
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault());long timeInSeconds = 1567109422L;
localDateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(timeInSeconds), ZoneId.systemDefault());localDateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(timeInSeconds, 0), ZoneId.systemDefault());long timeInMillis = 1567109422123L;
localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(timeInMillis), ZoneId.systemDefault());//Using Timestamp
localDateTime = Timestamp.from(Instant.now()).toLocalDateTime(); 

Date 和 String 互相转换

Date 转 String

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
String dateStr = df.format(now);

String 转 Date

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
String dateStr = df.format(now);
Date date = df.parse(dateStr);
http://www.lryc.cn/news/413674.html

相关文章:

  • Nvidia黄仁勋对话Meta扎克伯格:AI和下一代计算平台的未来 | SIGGRAPH 2024对谈回顾
  • 【JAVA设计模式】适配器模式——类适配器模式详解与案例分析
  • 【Vue】全局组件和局部组件
  • react引入高德地图并初始化卫星地图
  • 2024最简七步完成 将本地项目提交到github仓库方法
  • 前端WebSocket入门,看这篇就够啦!!
  • 漏洞复现-F6-11泛微-E-Cology-SQL
  • Turbo Boost 禁用
  • 假期BUUCTF小练习3
  • 【ubuntu系统】在虚拟机内安装Ubuntu
  • Python初学者必须掌握的基础知识点
  • ESP32是什么?
  • jemalloc分析内存
  • 【QT】qss
  • Java处理大数据的技巧
  • JavaScript基础——JavaScript常见语句(判断语句、循环语句、控制流语句)
  • 材质球向shader传值失败
  • 【TDH社区版大事件】图分析、全文检索、小文件治理、数据开发工具通通都有!
  • 【反序列化漏洞】serial靶机详解
  • C#列表按照日期进行从大到小排序
  • rt-thread每个线程状态切换方法
  • visual studio跳转到上一个/下一个光标处的快捷键设置
  • 网络基础命令配置复习 (基础华为设备)
  • 在AspNetCoreRateLimit中,ClientRateLimiting 和 IpRateLimiting 都有的时候按谁的来
  • PEP 8 – Python 代码风格指南中文版(五)
  • Spring中是如何实现IoC和DI的?
  • Excel第33享:借助易用宝将多个表格合并到一个表格
  • opencascade AIS_TrihedronOwner源码学习对象的实体所有者用于选择管理
  • 面试经典算法150题系列-跳跃游戏||
  • uniapp h5支付(支付宝和微信支付)