我检查了
SimpleDateFormat
javadoc,但是我无法找到一种以这样的日期格式解析
ordinal indicator的方法:
Feb 13th 2015 9:00AM
我试过“MMM dd yyyy hh:mma”,但是这些日子必须在数量上是正确的吗?
可以使用SimpleDateFormat解析“第13”日期,而不必截断字符串?
解决方法
Java的SimpleDateFormat不支持序数后缀,但序号后缀只是眼睛糖果 – 它是多余的,可以很容易的删除,以便直接解析:
Date date = new SimpleDateFormat("MMM dd yyyy hh:mma") .parse(str.replaceAll("(?<=\\d)(st|nd|rd|th)",""));
替换正则表达式非常简单,因为这些序列将不会出现在有效日期的其他位置.
处理任何以任何语言附加任意长度的序号指示符作为后缀的语言:
Date date = new SimpleDateFormat("MMM dd yyyy hh:mma") .parse(str.replaceAll("(?<=\\d)(?=\\D* \\d+ )\\p{L}+",""));
一些语言,例如普通话,预先填写他们的顺序指标,但也可以使用交替方式处理 – 作为读者的练习留下来:)