Java如何将yyyy-MM-dd格式字符串日期转换为指定格式字符串
Java日期格式转换实现方案
核心思路
- 先对输入字符串做拆分判断:用
&作为分隔符拆分,得到1个或2个待转换的原始日期串 - 采用Java 8+提供的
java.time系列API完成日期解析和格式化,规避传统SimpleDateFormat的线程安全隐患 - 格式化输出时明确指定
Locale.ENGLISH,确保月份输出为英文全称 - 拆分后有多个日期的场景,直接用
-拼接格式化后的结果即可
完整实现代码
import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.Locale; public class DateFormatConverter { // 输入日期的解析格式:yyyy-MM-dd private static final DateTimeFormatter INPUT_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 输出日期的格式化规则:月份全称 日期, 年份,指定英文Locale保证月份为英文 private static final DateTimeFormatter OUTPUT_DATE_FORMAT = DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.ENGLISH); public static String convert(String inputDateStr) { // 按&符号拆分输入 String[] dateArr = inputDateStr.split("&"); StringBuilder sb = new StringBuilder(); for (int i = 0; i < dateArr.length; i++) { // 解析单个日期并格式化 LocalDate date = LocalDate.parse(dateArr[i].trim(), INPUT_DATE_FORMAT); sb.append(date.format(OUTPUT_DATE_FORMAT)); // 多日期用-拼接 if (i != dateArr.length - 1) { sb.append("-"); } } return sb.toString(); } public static void main(String[] args) { // 测试单日期场景 System.out.println(convert("2021-08-30")); // 输出结果:August 30, 2021 // 测试双日期拼接场景 System.out.println(convert("2021-08-30&2021-09-16")); // 输出结果:August 30, 2021-September 16, 2021 } }
注意事项
- 如果业务要求对非法输入做兼容,可以在解析日期前增加格式校验逻辑,捕获
DateTimeParseException返回默认值或者抛出业务异常 - 如果使用的Java版本低于8,需要替换为
SimpleDateFormat实现,注意SimpleDateFormat非线程安全,不要定义为静态常量,每次使用新建实例或者用ThreadLocal封装 - 不要省略
Locale.ENGLISH参数,否则中文系统环境下会默认输出中文月份,不符合需求
内容的提问来源于stack exchange,提问作者Sugata Kar
相关产品推荐
相关产品推荐

