Java字符串转Date对象如何保留原有格式 转换后输出格式不一致问题
核心问题原因
你遇到的格式差异本质是对java.util.Date类的设计存在认知误区:
java.util.Date本身不存储任何格式化信息,它仅保存了对应时间点的时间戳(从1970-01-01 00:00:00 UTC开始计算的毫秒值),你想要让Date对象本身保留自定义格式的需求本身是无法实现的,因为Date类的设计就没有存储格式的字段。- 你调用
Date.toString()看到的Mon Jan 01 00:00:00 SAST 2024格式,只是Date类自带的默认格式化规则输出的结果,和你转换时用的格式没有任何关联。 - 你贴的代码里还存在笔误:你用格式为
yyyy-MM-dd的dateFormatter1格式化日期,输出应该是2024-01-01,注释里的01 January 2024是dateFormatter2才能输出的结果。
对应解决方案
根据你提到的必须返回Date类型的前置条件,可按两种场景处理:
- 如果你可以修改现有函数的返回类型:直接返回格式化后的
String类型即可,用对应格式的SimpleDateFormat把Date转成你要的字符串格式再返回 - 如果你不能修改函数返回类型:不要尝试在Date对象上保留格式,只需要在调用该函数拿到返回的Date对象后,用你需要的格式的日期格式化工具,把Date转成对应字符串使用即可
额外优化建议
SimpleDateFormat是线程不安全的,多线程环境下使用容易出现异常,如果你用的是Java 8及以上版本,建议替换为java.time包下的相关类:
// 线程安全的DateTimeFormatter DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH); DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("dd MMMM yyyy", Locale.ENGLISH); // 字符串转LocalDate LocalDate date = LocalDate.parse("2024-01-01", inputFormatter); // LocalDate转指定格式字符串 String formatStr = date.format(outputFormatter); // 输出01 January 2024
内容的提问来源于stack exchange,提问作者TurboCoder
相关产品推荐
相关产品推荐

