详解Java DateTimeFormatter

一、DateTimeFormatter简介

Java 8新引入的DateTimeFormatter类是Java日期时间API中一个很重要的类,用于格式化和解析日期时间字符串。它可以将日期时间对象格式化为字符串,并将字符串解析为日期时间对象。

在使用DateTimeFormatter类进行日期时间格式化或解析的时候,我们可以通过预定义的DateTimeFormatter常量或自定义模式来指定格式。DateTimeFormatter常量包括ISO、BASIC_ISO_DATE、RFC_1123、ISO_LOCAL_DATE、ISO_LOCAL_TIME、ISO_LOCAL_DATE_TIME、ISO_OFFSET_DATE_TIME、ISO_ZONED_DATE_TIME等。默认情况下,DateTimeFormatter使用ISO_LOCAL_DATE_TIME作为格式。

二、预定义的DateTimeFormatter格式

DateTimeFormatter类定义了一些预定义的格式常量,可以非常方便地将日期、时间和日期时间对象格式化为字符串。下面列举几个常用的DateTimeFormatter格式:

1、ISO_LOCAL_DATE

这个格式用于日期的ISO-8601格式,例如:“2019-12-31”。

LocalDate localDate = LocalDate.of(2019,12,31);
String strDate = localDate.format(DateTimeFormatter.ISO_LOCAL_DATE);
//输出:"2019-12-31"

2、ISO_LOCAL_TIME

这是一个ISO-8601格式的时间格式,例如:“23:59:59.999999999”。

LocalTime localTime = LocalTime.of(23,59,59,999999999);
String strTime = localTime.format(DateTimeFormatter.ISO_LOCAL_TIME);
//输出:"23:59:59.999999999"

3、BASIC_ISO_DATE

这是一个格式化日期的基本ISO格式,例如:”20191231″

LocalDate localDate = LocalDate.of(2019,12,31);
String strDate = localDate.format(DateTimeFormatter.BASIC_ISO_DATE);
//输出:"20191231"

4、ISO_OFFSET_DATE

这是一个ISO-8601格式的日期格式,包括偏移量,例如:“2019-12-31+08:00”。

LocalDate localDate = LocalDate.of(2019,12,31);
ZoneOffset offset = ZoneOffset.ofHours(8);
OffsetDateTime offsetDateTime = OffsetDateTime.of(localDate.atStartOfDay(),offset);
String strDateTime = offsetDateTime.format(DateTimeFormatter.ISO_OFFSET_DATE);
//输出:"2019-12-31+08:00"

三、自定义DateTimeFormatter格式

如果预定义的DateTimeFormatter格式常量不能满足需求,可以自定义DateTimeFormatter格式。

1、通过DateTimeFormatter.ofPattern()方法自定义模式

可以使用DateTimeFormatter.ofPattern()方法来自定义日期、时间或日期时间的格式模式。下面是一些例子:

非常简单的例子:

LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String strDateTime = localDateTime.format(formatter);
//输出:"2022-08-09 09:00:00"

稍微复杂一些的例子:

LocalDatetime localDateTime = LocalDateTime.of(2019, 12, 31, 23, 59, 59, 999999999);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.SSSSSSSSS");
String strDateTime = localDateTime.format(formatter);
//输出:"2019-12-31 23:59:59.999999999"

2、自定义本地化语言

可以通过withLocale()方法使用不同的本地化语言。

Locale locale = Locale.US;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E MMM dd, yyyy HH:mm:ss").withLocale(locale);
ZonedDateTime zonedDateTime = ZonedDateTime.now();
String strZonedDateTime = zonedDateTime.format(formatter);
//输出:"Tue Aug 09, 2022 09:00:00"

四、解析日期时间字符串

DateTimeFormatter不仅可以格式化日期时间对象为字符串,也可以将字符串解析为日期时间对象。

1、通过ofPattern()进行解析

String strDateTime = "2019-12-31 23:59:59.999999999";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSSSS");
LocalDateTime localDateTime = LocalDateTime.parse(strDateTime, formatter);
//输出:"2019-12-31T23:59:59.999999999"

2、通过定义格式进行解析

如果字符串的日期格式与之前定义的DateTimeFormatter相同,可以使用该DateTimeFormatter解析字符串。

String strDateTime = "2019-12-31T23:59:59.999999999";
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
LocalDateTime localDateTime = LocalDateTime.parse(strDateTime, formatter);
//输出:"2019-12-31T23:59:59.999999999"

五、总结

通过Java 8中引入的DateTimeFormatter,我们可以方便地将日期、时间和日期时间格式化为字符串,并将字符串解析为日期时间对象。除此之外,我们也可以自定义模式和本地化语言,来满足不同的需求。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/180301.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-22 05:12
下一篇 2024-11-22 05:12

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29
  • Java 8 Group By 会影响排序吗?

    是的,Java 8中的Group By会对排序产生影响。本文将从多个方面探讨Group By对排序的影响。 一、Group By的概述 Group By是SQL中的一种常见操作,它…

    编程 2025-04-29

发表回复

登录后才能评论