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"));
}
}
期望上述内容返回2018-01-01的日期。但得到例外
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "201800101" is too short
at org.joda.time.format.DateTimeFormatter.parseLocalDateTime(DateTimeFormatter.java:900)
at org.joda.time.format.DateTimeFormatter.parseLocalDate(DateTimeFormatter.java:844)
答案 0 :(得分:1)
您需要根据docs使用单引号。
declare var android :any;
虽然很奇怪,但在我的测试中它仍然不起作用,因为看起来像库中的一个错误 - joda DateTimeFormatter DF_YYYY_0MM_DD = DateTimeFormat.forPattern("yyyy'0'MMdd");
中的isNumericToken(String token)
基本上没有考虑数字文字。这最终导致joda期望9年而不是4位数。
因此,作为一种解决方法,您可以这样做来构建格式化程序(而不是直接从字符串模式创建它):
DateTimeFormat
或者,在日期前加上5个零(因此那一年现在有9个数字)。
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"));