Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/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 monthOfYear的解析器模式,它不是零填充的,没有文本分隔_Java_Jodatime - Fatal编程技术网

Java monthOfYear的解析器模式,它不是零填充的,没有文本分隔

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个字符足够简单,但在这种情况下

是否可以使用jodatime解析日期
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的未来版本中实现此功能。