Java monthOfYear的解析器模式,它不是零填充的,没有文本分隔
是否可以使用jodatime解析日期Java monthOfYear的解析器模式,它不是零填充的,没有文本分隔,java,jodatime,Java,Jodatime,是否可以使用jodatime解析日期8302011?在一个不那么痛苦的格式中,它看起来像8/30/2011,我将其模式设置为MM/dd/yyyy 我所尝试的: 模式Mddyyyy 8302011->无法分析“8302011”:monthOfYear的值83必须在[1,12]范围内。 12302011->2011-12-30T00:00:00.000Z 幸运的是,日期并不含糊,因为day始终表示为两位数字。然而,月份是一位或两位数字 我意识到将左边的零填充到8个字符足够简单,但在这种情况下
8302011
?在一个不那么痛苦的格式中,它看起来像8/30/2011
,我将其模式设置为MM/dd/yyyy
我所尝试的:
- 模式
Mddyyyy
->8302011
无法分析“8302011”:monthOfYear的值83必须在[1,12]范围内。
->12302011
2011-12-30T00:00:00.000Z
day
始终表示为两位数字。然而,月份是一位或两位数字
我意识到将左边的零填充到8个字符足够简单,但在这种情况下,我无法做到这一点 我知道下面的内容与jodatime不同,但您能否尝试使用SimpleDateFormat将日期解析为另一种格式
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* Created by luan on 9/12/16.
*/
public class DateTimeFormatTest {
public SimpleDateFormat simpleDateFormat = new SimpleDateFormat("Mddyyyy");
public SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("MM/dd/yyyy");
public Date getDate(String source){
Date date = null;
try {
date = simpleDateFormat.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
public String parseStringValue(Date date){
String result = "";
result = simpleDateFormat2.format(date);
return result;
}
public static void main(String[] args) {
DateTimeFormatTest obj = new DateTimeFormatTest();
Date date = obj.getDate("8302011");
System.out.println(date);
String result = obj.parseStringValue(date);
System.out.println(result);
}
}
输出:
Tue Aug 30 00:00:00 ICT 2011
08/30/2011
事实上,随着我深入挖掘,我开始质疑我最初的答案,这让我想到@JasonSperske你是对的。这确实有效,幸运的是我正在使用
DateTimeFormatterBuilder
,因此我可以指定最小和最大数字。不幸的是,您似乎无法在模式字符串中指定。SO是一个很好的输入源,因此我对这个问题进行了改进。非常感谢。不幸的是,Joda Time(以及JSR-310)不支持这种模式。虽然你已经找到了一个很好的解决方法,我建议你向Joda Time issue tracker提交一个问题。然后,您可能有机会在Joda Time的未来版本中实现此功能。