点击关注公众号,实用技术文章及时了解

DateTimeFormatter类

我们先来看看SImpleDateFormat类的部分源码,如图1所示。

图1

接着再来看看DateTimeFormatter类的部分源码,如 图2所示。

图2

由上可知,与SimpleDateFormat不同的是,DateTimeFormatter不但是不变对象,它还是线程安全的。线程的概念我们会在后面涉及到。

现在我们只需要记住:因为SimpleDateFormat不是线程安全的,使用的时候,只能在方法内部创建新的局部变量。而DateTimeFormatter可以只创建一个实例,到处引用。

接下来,我们来说一说DateTimeFormatter类的常用方法

//创建一个格式化程序使用指定的模式
static DateTimeFormatter ofPattern(String pattern) //创建一个格式化程序使用指定的模式和现场。
static DateTimeFormatter ofPattern(String pattern, Locale locale) //使用此格式化程序格式的日期时间对象
String format(TemporalAccessor temporal)

其中,TemporalAccessor是一个接口,其实现类有LocalDate、LocalTime、LocalDateTime、ZonedDateTime等……

所以我们在使用format方法时,一般传入其实现类的实例化对象即可。

接下来我们举几个例子。

范例1:创建DateTimeFormatter

package edu.blog.test07;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class DateTimeFormatterTestDemo01 {public static void main(String[] args) {//自定义输出格式DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");System.out.println(dtf.format(LocalDateTime.now()));System.out.println("===================================");//自定义格式解析LocalDateTime localDateTime = LocalDateTime.parse("2001/07/27 22:22:22", dtf);System.out.println(localDateTime);}
}/*
结果:
2021/04/02 23:14:46
===================================
2001-07-27T22:22:22
*/

由上可知,DateTimeFormatter类格式化字符串的使用方式与SImpleDateFormat一样。

此外,另一种创建DateTimeFormatter的方法是,传入格式化字符串的同时,同时指定Locale。

范例2:按照Locale默认习惯格式化

package edu.blog.test07;import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;public class DateTimeFormatterTestDemo02 {public static void main(String[] args) {ZonedDateTime zonedDateTime = ZonedDateTime.now();System.out.println(zonedDateTime);System.out.println("==============================");DateTimeFormatter formatter01 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ZZZZ");System.out.println(formatter01.format(zonedDateTime));System.out.println("==============================");DateTimeFormatter formatter02 = DateTimeFormatter.ofPattern("yyyy MMM dd EE:HH:mm", Locale.CHINA);System.out.println(formatter02.format(zonedDateTime));System.out.println("==============================");DateTimeFormatter formatter03 = DateTimeFormatter.ofPattern("E, MMMM/dd/yyyy HH:mm", Locale.US);System.out.println(formatter03.format(zonedDateTime));}
}/*
结果:
2021-04-02T23:27:59.326+08:00[Asia/Shanghai]
==============================
2021-04-02T23:27:GMT+08:00
==============================
2021 四月 02 星期五:23:27
==============================
Fri, April/02/2021 23:27
*/

运行本程序,分别以默认方式、中国地区和美国地区对当前时间进行显示,结果如上所述。

在格式化字符串中,如果需要输出固定字符,可以用’xxx’表示。

当我们直接调用"System.out.println()"对一个ZonedDateTime或者LocalDateTime实例进行打印的时候,实际上,调用的是它们的toString()方法,默认的toString()方法显示的字符串就是按照ISO 8601格式显示的,我们可以通过DateTimeFormatter预定义的几个静态变量来引用。

范例3:过DateTimeFormatter预定义静态变量

package edu.blog.test07;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class DateTimeFormatterTestDemo03 {public static void main(String[] args) {LocalDateTime localDateTime = LocalDateTime.now();System.out.println(localDateTime);System.out.println(DateTimeFormatter.ISO_DATE.format(localDateTime));System.out.println(DateTimeFormatter.ISO_DATE_TIME.format(localDateTime));}
}/*
结果:
2021-04-02T23:38:11.707
2021-04-02
2021-04-02T23:38:11.707
*/

总结

ZonedDateTimeLocalDateTime进行格式化,需要使用DateTimeFormatter类,DateTimeFormatter可以通过格式化字符串和Locale对日期和时间进行定制输出。

来源:blog.csdn.net/Window_mouse/article/

details/116356814?

推荐

Java面试题宝典

技术内卷群,一起来学习!!

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!

请别再使用 SimpleDateFormat 格式化时间了,DateTimeFormatter 更出色!相关推荐

  1. java 时间格式化_还在用SimpleDateFormat格式化时间?小心经理锤你

    还在用SimpleDateFormat格式化时间?小心经理锤你 场景 本来开开心心的周末时光,线上突然就疯狂报错,以为程序炸了,截停日志,发现是就是类似下述一段错误 java.lang.NumberF ...

  2. 日期格式化为yyyymmdd_你还在用SimpleDateFormat格式化时间嘛

    Jdk1.8之时间处理 该文章已经同步到Github:https://github.com/stackInk/makerstack 1. 传统时间处理的问题 1.1 多线程环境下的SimpleDate ...

  3. java-使用SImpleDateFormat格式化时间输出

    之前有篇博客是使用NSDateFormatter来对时间进行格式化输出,但使用起来有点繁琐,今天介绍下最近刚刚使用的SimpleDateFormat. 1 public class SimpleDat ...

  4. Java 时间处理(格式解释、格式化时间、获取当前时间、获取年份、月份等、时间戳转换成时间)

    日期和时间模式(注意大小写,代表的含义是不同的): yyyy:年 MM:月 dd:日 hh:1~12小时制(1-12) HH:24小时制(0-23) mm:分 ss:秒 S:毫秒 E:星期几 D:一年 ...

  5. java 表达式 日期加减_jdk8获取当前时间|时间加减|java8时间格式化|时间处理工具|时间比较|线程安全的时间处理方法...

    目录 前言 在很久之前,我总结了一些jdk7版本之前的关于时间处理的一些公共方法,日期转换成字符串.指定时间加上指定天数后的日期.获取上周周一时间 等等:具体的可以戳链接查看完整的:https://b ...

  6. java 格式化日期到毫秒_关于日期:Java – SimpleDateFormat格式化程序,以毫秒为单位返回纪元时间...

    本问题已经有最佳答案,请猛点这里访问. 我是Java和编码的新手 - 我有一些代码以下列格式yyyy.MM.dd HH:mm:ss:ms返回时间戳,如下所示: SimpleDateFormat for ...

  7. 杂记——请再给我一点时间

    "请再给我一点时间" 我是Yangrl,好久不见,想写这篇杂记已经很久了,今天(2018/3/27)正好被触动,记录总结一下这段时间.四月,你好! 20188/3/9 这天,老师告 ...

  8. 4hutool源码分析:DateUtil(时间工具类)-格式化时间(万字长文源码分析,学大佬如何写代码)

    技术活,该赏 点赞再看,养成习惯 看本篇文章前,建议先对java源码的日期和时间有一定的了解,如果不了解的话,可以先看这篇文章: 万字博文教你搞懂java源码的日期和时间相关用法 关联文章: huto ...

  9. JSP开发之JSP 日期处理(SimpleDateFormat格式化日期)案例了解下

    我们使用JSP最重要的优势之一,就是可以使用所有Java  API,我们这次就来看下Java中的Date类,它在java.util包下. 我们要知道Date类有两个构造函数.第一个构造函数使用当前日期 ...

  10. 使用DateTimeFormatter实现格式化时间

    用扫描器获取输入的时间(年月日时分),这个时间的格式是常用的格式,然后格式化这个时间,把格式化的时间输出到控制台,可以在控制台重复输入时间.格式化的时间参考企业微信聊天记录的展示时间.用DateTim ...

最新文章

  1. MySQL 单表优化
  2. Linux中命令链接操作符的十个最佳实例
  3. C语言typedef和Windows数据类型
  4. ARM中Bus Error的测试
  5. (WPF) DataGrid之绑定
  6. Cocos2d-x移植Android 常见问题处理办法
  7. 华为数据之道_DT|华为数据之道,怕你学不会,这次干脆出了本书
  8. 这个PHP无解深坑,你能解出来吗?(听说能解出来的都很秀)
  9. mysql复制(高可用架构方案的基础)
  10. php date日期相关函数
  11. 常用问题排查工具和分析神器,值得收藏
  12. Protel DXP 2004的元件封装/快捷键大全/PCB使用技巧
  13. 转载《美团容器平台架构及容器技术实践》
  14. 与“十“俱进 阿里数据库运维10年演进之路 1
  15. android 手机 otg,对于安卓智能手机的OTG功能,你了解多少
  16. 数据库oracle--PL/SQL的使用-如何按f8只执行一行
  17. Python实现VRP常见求解算法——离散量子行为粒子群算法(DQPSO)
  18. 雷达信号处理&重学傅里叶变换(一):Radar cube &multidimensional Fourier transform
  19. 文献笔记:RhythmNet: End-to-end Heart Rate Estimation from Face via Spatial-temporal Representation
  20. MySql安装配置(msi版)

热门文章

  1. 读《南怀瑾讲人生哲理》
  2. 不谋一时不足以谋一域_“不谋万世者,不足谋一时。不谋全局者,不足谋一隅”出自哪里?是什么意思?...
  3. leet code 006:ZigZag Conversion
  4. C++实现 L1-054 福到了 (15分)
  5. 潮汕“七样羹”,吃了变后生
  6. 电脑远程桌面连接怎么操作?
  7. 分布式技术原理(一):分布式的三围
  8. 计算机心理学测试题目及答案解析,测量心理学考研重点选择题(含答案)
  9. JSP之java.lang.ClassNotFoundException
  10. dbind-WARNING **: Error retrieving accessibility bus address