【发布时间】:2021-05-06 13:43:48
【问题描述】:
我在 Kotlin 中的日期格式模式上有些挣扎。
我有一个 PHP 后端,它以"Y-m-d H:i:s T" 格式格式化日期,正如您可能从标题中猜到的那样,结果为:[“2021-05-06 15:24:26 CEST”]。如您所见,还有一个时区,在我们的例子中是“CEST”。
但是,我的 Kotlin 应用程序告诉我,“”是无效的时区格式。
我对使用的不同模式感到非常困惑,我花了一段时间才掌握,所以模式内部可能存在错误。
在 Kotlin 中,我有以下 GSONBuilder:
val gson = GsonBuilder().setLenient().setDateFormat("yyyy-MM-dd HH:mm:ss z").create()
我也尝试了"yyyy-MM-dd H:m:s z" 和"yyyy-MM-dd HH:mm:ss Z" 的模式,但也没有用。我的模式有错误吗?我的意思是,时区是结果的一部分。如果是,正确的模式是什么?
注意:如果可能有帮助,调试器会告诉我索引越界异常。
编辑: 缩短的异常堆栈:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: app, PID: 27254
com.google.gson.JsonSyntaxException: 2021-05-11 10:07:04 CEST
at com.google.gson.DefaultDateTypeAdapter.deserializeToDate(DefaultDateTypeAdapter.java:151)
at com.google.gson.DefaultDateTypeAdapter.read(DefaultDateTypeAdapter.java:128)
at
...
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
...
retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:40)
...
at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:243)
at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:153)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:174)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at
...
Caused by: java.text.ParseException: Failed to parse date ["2021-05-11 10:07:04 CEST"]: Invalid time zone indicator ' '
at com.google.gson.internal.bind.util.ISO8601Utils.parse(ISO8601Utils.java:274)
at com.google.gson.DefaultDateTypeAdapter.deserializeToDate(DefaultDateTypeAdapter.java:149)
at
... (Same as first stack trace)
Caused by: java.lang.IndexOutOfBoundsException: Invalid time zone indicator ' '
at com.google.gson.internal.bind.util.ISO8601Utils.parse(ISO8601Utils.java:245)
at com.google.gson.DefaultDateTypeAdapter.deserializeToDate(DefaultDateTypeAdapter.java:149)
at
... (same as first stack trace)
编辑 2:
由于 CEST 确实不是有效的 Java ID,我将 PHP 格式从 "Y-m-d H:i:s T" 更改为 "Y-m-d H:i:s e",现在结果为“2021-05-11 10:07:04 Europe/Berlin”,并且确实是一个有效的时区标识符到cutikos评论。
但是,错误还是一样。
【问题讨论】:
-
我不认为
CEST是一个有效的ID garygregory.wordpress.com/2013/06/18/… -
嗯,它是PHP制作的,所以应该是
-
你能发布你的调试器错误信息吗?