请别再使用 SimpleDateFormat 格式化时间了,DateTimeFormatter 更出色!
程序员的成长之路
共 5395字,需浏览 11分钟
· 2022-07-31
阅读本文大概需要 3.5 分钟。
来自:blog.csdn.net/Window_mouse/article/
DateTimeFormatter类
SImpleDateFormat
类的部分源码,如图1所示。DateTimeFormatter
类的部分源码,如 图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
的方法是,传入格式化字符串的同时,同时指定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
*/
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
*/
总结
ZonedDateTime
或LocalDateTime
进行格式化,需要使用DateTimeFormatter
类,DateTimeFormatter
可以通过格式化字符串和Locale对日期和时间进行定制输出。推荐阅读:
“师媛”再惹争议!上海女老师上课时座无虚席,本应是好事,可网上却骂声一片!
面试官:Java8 lambda 表达式 forEach 如何提前终止?
互联网初中高级大厂面试题(9个G) 内容包含Java基础、JavaWeb、MySQL性能优化、JVM、锁、百万并发、消息队列、高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper......等技术栈!
⬇戳阅读原文领取! 朕已阅
评论
微软开源MS-DOS操作系统源码,冲到GitHub第一了!
大家好,我是轩辕。这两天逛GitHub的时候,突然发现一个叫 MS-DOS的项目冲到Trending榜首了!定睛一看,微软官方啊,搜了一下才知道,原来前两天,微软把MS-DOS 4.0系统开源了!关于这个系统,估计现在很多程序员都不知道了,或者只在古老的教科书上看过这玩意儿。MS-DOS,全称为Mi
编程技术宇宙
6
多人同时导出 Excel 干崩服务器!新来的阿里大佬给出的解决方案太优雅了!
点击关注公众号,Java 干货及时推送↓推荐阅读:面试辅导,我们出大成果了!来源:juejin.cn/post/7259249904777838629前言 业务诉求:考虑到数据库数据日渐增多,导出会有全量数据的导出,多人同时导出可以会对服务性能造成影响,导出涉及到mysql查询的io操作,
Java技术栈
1
今年后端爆了???
大家好,我是二哥呀。每次登录牛客,看到最多的就是各种 Java 后端岗位的喜讯,美团 OC了、快手 OC 了、就连腾讯 OC 的都是 Java 岗,我怀疑牛客是不是给我打了“只报喜不报忧”的标签?星球里也有不少球友给我发来喜讯,难道说每年都在凉凉的 Java 后端又承担起了就业的重任?!不可能,绝对
沉默王二
3
新规!不授予学位!博士毕业更难了?
来源:阿秒富友研究院编辑:学妹据4月22日科技日报消息,全国人大常委会法工委发言人杨合庆在近日举行的记者会上表示,即将提请十四届全国人大常委会第九次会议审议的学位法草案二次审议稿将进一步完善学位授予条件和程序,并对保障博士学位质量作出专门规定。杨合庆介绍,2023年8月,十四届全国人大常委会第五次会
机器学习初学者
0
大量 Java 开源项目停更...
点击关注公众号,Java 干货及时推送↓推荐阅读:投了 100 多份简历后…出品 | OSC开源社区(ID:oschina2013)Sonatype 发布了最新的一份《软件供应链状况》报告,深入探讨了如何在充满选择的世界中定义更好的软件,并探讨人工智能 (AI) 对软件开发的深远
Java技术栈
0
GPT的风也吹到了CV,详解自回归视觉模型的先驱! ImageGPT:使用图像序列训练图像 GPT模型
作者丨科技猛兽编辑丨极市平台导读 在 CIFAR-10 上,iGPT 使用 linear probing 实现了 96.3% 的精度,优于有监督的 Wide ResNet,并通过完全微调实现了 99.0% 的精度,匹配顶级监督预训练模型。本文目录1 自回归视觉模型的先驱 ImageGPT:
机器学习初学者
0
35K*14 薪入职了,这公司只要不裁员,我能一直呆下去。。
大家好,我是R哥。说说最近的面试辅导,有个学员进了某个知名互联网公司,拿到了 35K*14 薪的好成绩,有不少粉丝留言问我,现在行情这么差,他是怎么做到的?这篇拿他这个案例完整回顾一下吧,我管他叫小Y吧。背景沟通说下小Y的基本情况吧:小Y工作 5 年+,空窗期2个月+,5 年干了 3 家单位,学历不
Java技术栈
0
1000Mbps换算成MB/s是多少?除以8?想简单了!
原文链接:https://post.smzdm.com/p/azoqenzp/在网络传输的时候,往往会用到Mbps这个单位,GbE or 1 GigE 的网卡现在很流行,这个东西被大家叫做“千兆网卡”。同时,大家特别习惯用GB或者MB来描述一个磁盘的大小。这个叫做Gigabyte或者Megabyte
测试开发技术
0