一、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/zh-tw/n/180301.html