DateTimeFormatter
使用旧的Date
对象时,我们用SimpleDateFormat
进行格式化显示。使用新的LocalDateTime
或ZonedDateTime
时,我们要进行格式化显示,就要使用DateTimeFormatter
。
和SimpleDateFormat
不同的是,DateTimeFormatter
不但是不变对象,它还是线程安全的。线程的概念我们会在后面涉及到。现在我们只需要记住:因为SimpleDateFormat
不是线程安全的,使用的时候,只能在方法内部创建新的局部变量。而DateTimeFormatter
可以只创建一个实例,到处引用。
创建DateTimeFormatter
时,我们仍然通过传入格式化字符串实现:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
格式化字符串的使用方式与SimpleDateFormat
完全一致。
另一种创建DateTimeFormatter
的方法是,传入格式化字符串时,同时指定Locale
:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E, yyyy-MMMM-dd HH:mm", Locale.US);
这种方式可以按照Locale
默认习惯格式化。我们来看实际效果:
import java.time.*;
import java.time.format.*;
import java.util.Locale;
----
public class Main {
public static void main(String[] args) {
ZonedDateTime zdt = ZonedDateTime.now();
var formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm ZZZZ");
System.out.println(formatter.format(zdt));
var zhFormatter = DateTimeFormatter.ofPattern("yyyy MMM dd EE HH:mm", Locale.CHINA);
System.out.println(zhFormatter.format(zdt));
var usFormatter = DateTimeFormatter.ofPattern("E, MMMM/dd/yyyy HH:mm", Locale.US);
System.out.println(usFormatter.format(zdt));
}
}
在格式化字符串中,如果需要输出固定字符,可以用'xxx'
表示。
运行上述代码,分别以默认方式、中国地区和美国地区对当前时间进行显示,结果如下:
2019-09-15T23:16 GMT+08:00
2019 9月 15 周日 23:16
Sun, September/15/2019 23:16
当我们直接调用System.out.println()
对一个ZonedDateTime
或者LocalDateTime
实例进行打印的时候,实际上,调用的是它们的toString()
方法,默认的toString()
方法显示的字符串就是按照ISO 8601
格式显示的,我们可以通过DateTimeFormatter
预定义的几个静态变量来引用:
var ldt = LocalDateTime.now();
System.out.println(DateTimeFormatter.ISO_DATE.format(ldt));
System.out.println(DateTimeFormatter.ISO_DATE_TIME.format(ldt));
得到的输出和toString()
类似:
2019-09-15
2019-09-15T23:16:51.56217
小结
对ZonedDateTime
或LocalDateTime
进行格式化,需要使用DateTimeFormatter
类;
DateTimeFormatter
可以通过格式化字符串和Locale
对日期和时间进行定制输出。
相关文章
- 在线地图持续进化,BAT技术“鲜”发制人
- 阴阳五行在数据分析中的致命问题2011.11.5
- 知乎15篇书籍推荐帖子中的书名号统计2022.11.7
- 万维钢精英日课4统计学新书《让世界讲得通》2022.11.11
- 双十一天猫分类销售额简单看看2022.11.14
- 《数据与城市》走在理想的边缘2022.11.14
- #每周一本书计划#11月第3周《清单革命》
- @@知乎提问数据分析推荐书籍的统计分析2022.11.21
- 今年冬天是暖冬还是寒冬?拉尼娜2022.11.22
- 继续看今年的天气2022.11.22
- 领略设计模式的魅力,谈谈组合模式搭配访问者模式
- 玩转JVM中的对象及引用:从创建到引用到分配和优化策略
- k50的67w超快充只是前5分钟2022.11.26
- 二手图书多抓鱼的价格和推荐2022.11.29
- 拒绝躺平,如何使用AOP的环绕通知实现分布式锁
- 初探持续监测技术
- 本次降温有多冷2022.12.2
- #每周一本书#《事实》
- 好强的chatGPT,“我失业了”2022.12.8
- 中国香港第五波疫情数据分析2022.12.9