如何使用 Joda TIme (JAVA 6) 解析特定格式

问题描述 投票:0回答:2

我需要用 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);

也许我做错了什么?

我找不到这个模式的好格式,所以如果有人有想法,非常感谢

java datetime parsing jodatime
2个回答
1
投票

根本不需要定义格式模式。您的输入文本符合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 已经过时了。


-1
投票

欢迎来到SO。 您的模式实际上是错误的,因为您没有考虑代表时区的“Z”。

正确的模式是:

 String pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'".

那应该有用。

© www.soinside.com 2019 - 2024. All rights reserved.