You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:18:02