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

niwlg2el  于 2023-04-28  发布在  Java
关注(0)|答案(2)|浏览(130)

我需要用joda库解析特定的日期,我不能使用其他库,因为它的java 6,我们没有另一个库在模块中可用。
总之,我有个约会:
2022-08-02T23:00:59Z
之后我需要解析它以进行一些操作,但是当我尝试解析时,我遇到了这个错误:
java.lang.IllegalArgumentException:无效格式:“2022-08- 02 T23:00:59 Z”在“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);

也许我做错了什么?
我找不到这个模式的好格式,所以如果有人有想法,非常感谢

y4ekin9u

y4ekin9u1#

根本不需要定义格式化模式。您的输入文本符合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库现在处于维护模式。它的创造者继续创造了它的继任者,java。time 类在JSR 310中定义,并与Java 8+捆绑在一起。这些类的后端支持早期的Java 6和Java 7。参见ThreeTen-Backport项目。
我建议使用该后端端口而不是Joda-Time。ThreeTen-Backport 的API与 java几乎相同。time。这使得最终迁移到 java。time 非常简单,只不过是修改import语句。
当然,Java 6已经过了生命周期的尽头。

myss37ts

myss37ts2#

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

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

应该可以

相关问题