我的约会让我发疯(Java)
我需要使用我的约会让我发疯(Java),java,date,datetime,simpledateformat,Java,Date,Datetime,Simpledateformat,我需要使用SimpleDataFormat将字符串转换为日期对象 我使用“MMM.dd yyyy”解析字符串,如“Dec.30 2011”,带有3个月字符和一个点 它在“2011年5月30日”期间失败,因此我必须捕获异常,并使用“MMM dd yyyy”重新尝试。它适用于《五月》,到目前为止还很难看,但效果不错 但到了“2011年9月11日”,上述所有加上“MMMM.dd yyyy”和“MMMM.dd yyyy”都失败了。所以我根本无法解析它 发生了什么事?试试这个模式- 年月日 代码- Dat
SimpleDataFormat
将字符串转换为日期对象
我使用“MMM.dd yyyy”
解析字符串,如“Dec.30 2011”
,带有3个月字符和一个点
它在“2011年5月30日”
期间失败,因此我必须捕获异常,并使用“MMM dd yyyy”
重新尝试。它适用于《五月》,到目前为止还很难看,但效果不错
但到了“2011年9月11日”,上述所有加上“MMMM.dd yyyy”和“MMMM.dd yyyy”都失败了。所以我根本无法解析它
发生了什么事?试试这个模式-
年月日
代码-
DateFormat df = new SimpleDateFormat("MMM'.' dd yyyy");
Date date = df.parse("Dec. 30 2011");
希望它能帮你开个玩笑:)我认为没有现成的解决方案来进行宽容的日期解析。JDK和常用的Joda时间库都不直接支持这一点。但是编写一个助手方法,尝试不同的日期格式,直到成功(或失败),应该相对容易
private静态最终日期格式[]格式=新日期格式[]{
新简化格式(“MM.dd yy”),
新的简化格式(“年月日”),
新的简化格式(“MMM dd yy”)};
公共静态同步日期解析(字符串dateString)引发ParseException{
parsee=null;
对于(DateFormat:FORMATS)请尝试{
返回format.parse(日期字符串);
}捕获(解析异常){
如果(e==null | | e.getErrorOffset()
如果是我,我不会尝试不同的模式,也不会依赖异常处理,我只会将前3个字母作为子串,附加最后7个字母,然后用MMMdd yyyy
解析,Java只能解析3个字母的缩写(asMMM
)或完整的月份名称(asMMMM
)
您必须将输入内容转换为3个字母的缩写。最简单的方法是使用正则表达式
在解析之前执行此行以清理它:
str = str.replaceAll("(?<=^...)\\w+\\.?", "");
str=str.replaceAll(“(?谢谢!我试过了,但没有乐趣。问题是“2011年9月30日”“@user2720403尝试使用'MMMM'2011年9月30日
不是日期字符串的正确表示,我认为字符串应该是2011年9月30日
。那么我必须用九月替换九月吗?我尝试了MMMM,它不起作用。MMMM也不起作用。使用训练点。-1这完全没有帮助。这不可能起作用。它只能解析。”“2013年9月11日”design patterns
tag用于特殊用途?同意,这是更好的方法。同意,但在解析英文月份名称时不要忘记指定英文区域设置,否则在其他默认区域设置中运行时会出错。
str = str.replaceAll("(?<=^...)\\w+\\.?", "");