gpt4 book ai didi

java - joda DateTimeFormatter 失败,格式为文字 0

转载 作者:行者123 更新时间:2023-11-30 06:10:58 25 4
gpt4 key购买 nike

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)

最佳答案

您需要根据 docs 使用单引号.

DateTimeFormatter DF_YYYY_0MM_DD = DateTimeFormat.forPattern("yyyy'0'MMdd");

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

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

DateTimeFormatter DF_YYYY_0MM_DD = new DateTimeFormatterBuilder().appendYear(4,4).appendLiteral("0").appendMonthOfYear(2).appendDayOfMonth(2).toFormatter();

或者,在日期前添加 5 个零(这样年份现在就有 9 位数字)。

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"));

关于java - joda DateTimeFormatter 失败,格式为文字 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50238500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com