一、日期时间解析与格式化
Java中关于日期时间的处理除了最开始的Date类和Calendar类等基础类外,在java.time包中引入了新的日期时间处理类。其中,DateTimeFormatter.ofPattern方法尤为常用。
DateTimeFormatter.ofPattern方法用于创建一个DateTimeFormatter对象,从而实现日期时间的解析和格式化。具体来说,它的作用主要有两个:
一是将日期时间格式化为指定的字符串格式;
二是将字符串格式的日期时间解析为对应的LocalDate、LocalTime或LocalDateTime等日期时间类。
下面先给出示例代码:
// 根据自定义格式创建DateTimeFormatter对象 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 格式化当前时间 String formattedStr = formatter.format(LocalDateTime.now()); // 解析字符串为LocalDateTime对象 LocalDateTime dateTime = LocalDateTime.parse(formattedStr, formatter);
在上述代码中,“yyyy-MM-dd HH:mm:ss”即为自定义的日期时间格式,其中“yyyy”表示4位数字的年份,“MM”表示2位数字的月份,“dd”表示2位数字的日期,“HH”表示2位数字的小时,“mm”表示2位数字的分钟,“ss”表示2位数字的秒数。
需要注意的是,这里的字母代表的含义是固定的,无法进行调整或扩展。为了满足不同的日期时间需求,我们可以使用不同的组合方式,创建不同的格式化器。
二、格式化展示
使用DateTimeFormatter.ofPattern方法,可以将日期时间对象格式化为指定的字符串形式,以便进行展示、存储或传输等操作。
下面给出一些基本的格式化示例:
// 标准格式化器,显示日期、时间和上午/下午标识 DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM); String formattedStr1 = formatter1.format(LocalDateTime.now()); // 格式化为"2022年12月31日 星期六 下午02时18分38秒" System.out.println(formattedStr1); // 自定义格式化器,只显示日期("yyyy-MM-dd"格式) DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd"); String formattedStr2 = formatter2.format(LocalDate.now()); // 格式化为"2022-12-31" System.out.println(formattedStr2); // 自定义格式化器,只显示时间("HH-mm-ss"格式) DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("HH-mm-ss"); String formattedStr3 = formatter3.format(LocalTime.now()); // 格式化为"14-34-00" System.out.println(formattedStr3);
在这些示例中,我们可以看到不同的格式化器创建方式和不同的日期时间格式。
三、日期时间解析
除了将日期时间格式化为指定字符串形式展示外,我们同样也可以将字符串格式的日期时间解析成对应的日期时间对象。
下面给出几个解析器示例:
// 标准解析器,将字符串解析为日期时间对象 DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM); LocalDateTime dateTime1 = LocalDateTime.parse("Dec 31, 2022 2:18:38 PM", formatter1); // 输出为"2022-12-31T14:18:38" System.out.println(dateTime1); // 自定义解析器,将字符串解析为LocalDate对象 DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日"); LocalDate date = LocalDate.parse("2022年11月30日", formatter2); // 输出为"2022-11-30" System.out.println(date); // 自定义解析器,将字符串解析为LocalTime对象 DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("HH/mm/ss"); LocalTime time = LocalTime.parse("14/34/00", formatter3); // 输出为"14:34:00" System.out.println(time);
在这些示例中,我们可以看到将字符串解析为日期时间对象的实际操作过程。
四、时区和本地化
除了基本的格式化和解析操作外,DateTimeFormatter还支持时区和本地化的设置,以便进行更加精确的日期时间处理。
下面给出两个示例:
// 标准格式化器,带有时区信息,显示日期、时间和上午/下午标识 DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM) .withLocale(Locale.GERMANY) .withZone(ZoneId.systemDefault()); String formattedStr1 = formatter1.format(ZonedDateTime.now()); // 输出为"31.12.2022 17:50:03" System.out.println(formattedStr1); // 自定义格式化器,带有时区信息,仅显示日期("yyyy/MM/dd"格式) DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy/MM/dd") .withZone(ZoneId.of("Asia/Shanghai")); String formattedStr2 = formatter2.format(ZonedDateTime.now()); // 输出为"2022/12/31" System.out.println(formattedStr2);
这里,我们可以看到如何针对时区和本地化信息,调整DateTimeFormatter的行为。比如第一个示例中,我们可以看到日期时间对象被转换为德语格式并被调整到了本地时区。
总之,DateTimeFormatter.ofPattern是一个非常常用的日期时间处理方法,它支持各种自定义的日期时间格式和解析器,以及多种时区和本地化设置,非常适合用于各类项目中。
原创文章,作者:XOKGY,如若转载,请注明出处:https://www.506064.com/n/361735.html