Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的约会让我发疯(Java)_Java_Date_Datetime_Simpledateformat - Fatal编程技术网

我的约会让我发疯(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个字母的缩写(as
MMM
)或完整的月份名称(as
MMMM

您必须将输入内容转换为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+\\.?", "");