Java日期格式转换:正确SimpleDateFormat格式及参考资源咨询
问题解答
1. 正确的日期格式与修改后的代码
你的输入日期字符串是2019-09-30T00:00:00.000+05:30,原代码里的SimpleDateFormat("yyyy-MM-dd HH:mm:ss")完全不匹配输入结构——输入里有T作为日期和时间的分隔符,还有毫秒部分.000以及时区偏移+05:30,所以格式字符串必须精准对应这些部分。
方案一:使用传统的SimpleDateFormat(不推荐,线程不安全)
正确的格式字符串应该是:"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
'T':匹配输入里的字面量T,需要用单引号转义避免被解析为模式字符SSS:对应毫秒部分.000XXX:对应时区偏移格式+05:30
修改后的代码:
public static String parseDateAndTimeStringCust(String datestring) { if(datestring.length()>=10){ SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); try { String fDate = new SimpleDateFormat("dd MMM yyyy").format(inputFormat.parse(datestring)); return fDate; } catch (ParseException ex) { ex.printStackTrace(); } } return datestring; }
方案二:使用Java 8+的java.time API(强烈推荐)
SimpleDateFormat是线程不安全的,Java 8引入的java.time包是线程安全且设计更合理的日期时间API,推荐优先使用:
import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; public static String parseDateAndTimeStringCust(String datestring) { if(datestring.length()>=10){ try { ZonedDateTime zonedDateTime = ZonedDateTime.parse(datestring); return zonedDateTime.format(DateTimeFormatter.ofPattern("dd MMM yyyy")); } catch (Exception ex) { ex.printStackTrace(); } } return datestring; }
这里不需要手动指定输入格式,因为你的输入符合ISO-8601标准,ZonedDateTime.parse()可以直接解析。
2. 构建日期格式可参考的权威资源
- Java官方API文档:
- 对于
SimpleDateFormat:查看Java SE文档中该类的说明,里面详细列出了所有可用模式字母(比如y代表年、M代表月、d代表日等)及其具体含义。 - 对于
java.time.format.DateTimeFormatter:同样参考Java SE官方文档,它的模式字母和SimpleDateFormat大部分兼容,但有更丰富的扩展,文档里也有完整的模式规则说明。
- 对于
- Oracle官方日期时间指南:Oracle提供的Java日期时间教程,会讲解如何正确使用日期格式化工具,以及常见日期时间处理场景的最佳实践。
这些资源由官方维护,内容准确且具备权威性,是构建日期格式的首选参考。
内容的提问来源于stack exchange,提问作者Devrath
相关产品推荐
相关产品推荐

