Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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 joda DateTimeFormatter失败,文本格式为0_Java_Parsing_Numbers_Jodatime_Literals - Fatal编程技术网

Java joda DateTimeFormatter失败,文本格式为0

Java joda DateTimeFormatter失败,文本格式为0,java,parsing,numbers,jodatime,literals,Java,Parsing,Numbers,Jodatime,Literals,预计上述信息将返回日期2018-01-01。但有例外 import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; public class DateTest { public static void main(String[] args) { DateTimeFormatter DF_YYYY_0MM_DD = DateTimeFormat.for

预计上述信息将返回日期2018-01-01。但有例外

import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class DateTest {

    public static void main(String[] args) {
        DateTimeFormatter DF_YYYY_0MM_DD = DateTimeFormat.forPattern("yyyy0MMdd");
        System.out.println(DF_YYYY_0MM_DD.parseLocalDate("201800101"));
    }

}

您需要为每个报价单使用一个报价单

DateTimeFormatter DF_YYYY_0MM_DD=DateTimeFormat.forPattern(“YYYY'0'MMdd”)

虽然很奇怪,但在我的测试中,它仍然不起作用,因为库中似乎有一个bug-基本上,joda的
DateTimeFormat
中的
isNumericToken(字符串标记)
没有考虑数字文字。这最终导致joda期望年数为9位数,而不是4位数

因此,作为一种解决方法,您可以这样做来构建格式化程序(而不是直接从字符串模式创建):

或者,在日期前加上5个零(因此该年份现在有9位数字)

或者使用分隔符

DateTimeFormatter DF_YYYY_0MM_DD = DateTimeFormat.forPattern("yyyy'0'MMdd");
System.out.println(DF_YYYY_0MM_DD.parseLocalDate("00000201800101"));

谢谢Vasan,我只是想确认一下。我认为在这种情况下,第一种选择是最好的解决办法<代码>DateTimeFormatter DF_YYYY_0MM_DD=新的DateTimeFormatterBuilder().appendYear(4,4).appendLiteral(“0”).appendMonthOfYear(2).appendDayOfMonth(2).toFormatter()是的,它是最干净的。除非你有一个限制,比如模式来自你无法控制的其他地方,你可以这样做。
DateTimeFormatter DF_YYYY_0MM_DD = new DateTimeFormatterBuilder().appendYear(4,4).appendLiteral("0").appendMonthOfYear(2).appendDayOfMonth(2).toFormatter();
DateTimeFormatter DF_YYYY_0MM_DD = DateTimeFormat.forPattern("yyyy'0'MMdd");
System.out.println(DF_YYYY_0MM_DD.parseLocalDate("00000201800101"));
DateTimeFormatter DF_YYYY_0MM_DD = DateTimeFormat.forPattern("yyyy-0-MM-dd");
System.out.println(DF_YYYY_0MM_DD.parseLocalDate("2018-0-01-01"));