我需要用 joda 库解析特定日期,我不能使用其他库,因为它是 java 6,而且我们在模块中没有其他可用的库。
无论如何,我有这个约会:
2022-08-02T23:00:59Z
之后我需要解析它以进行一些操作,但是当我尝试解析时,我遇到了这个错误:
java.lang.IllegalArgumentException:格式无效:“2022-08-02T23:00:59Z”在“Z”处格式错误
我的代码:
String pattern = "yyyy-MM-dd'T'HH:mm:ss";
String dateString="2022-08-02T23:00:59Z";
DateTimeFormatter date = DateTimeFormat.forPattern(pattern);
DateTime dateTIme = date.parseDateTime(dateString);
也许我做错了什么?
我找不到这个模式的好格式,所以如果有人有想法,非常感谢
根本不需要定义格式模式。您的输入文本符合Joda-Time中默认使用的ISO 8601标准格式。
DateTime dt = DateTime.parse( "2022-08-02T23:00:59Z" );
从该日期时间对象生成 ISO 8601 格式的文本。
String output = dt.toString();
2022-08-02T23:00:59.000Z
至于你的格式化模式有什么问题:你的模式占3部分(日期,
T
分隔符,时间)。但是您的输入有 4 个部分,这 3 个部分加上 offset-from-UTC,即 UTC 时间子午线之前或之后的小时-分钟-秒数。字符Z
是+00:00
的缩写,表示偏移量为零。
我不能使用其他库,因为它是 java 6,而且我们在模块中没有其他库可用
仅供参考,Joda-Time 库现在处于维护模式。它的创建者还继续创建了它的继承者,即定义在 JSR 310 中并与 Java 8+ 捆绑在一起的 java.time 类。这些类的反向端口是为了支持早期的 Java 6 和 Java 7。请参阅 ThreeTen-Backport 项目。
我建议使用那个后向端口而不是 Joda-Time。 ThreeTen-Backport 的 API 与 java.time 几乎相同。这使得最终迁移到 java.time 非常简单,只不过是更改
import
语句。
当然,Java 6 已经过时了。
欢迎来到SO。 您的模式实际上是错误的,因为您没有考虑代表时区的“Z”。
正确的模式是:
String pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'".
那应该有用。