GsonBuilder setDateFormat为"2011-10-26T20:29:59-07:00"

Lux*_*ode 49 java date gson

我在json得到一个日期/时间2011-10-26T20:29:59-07:00.什么是gsonBuilder.setDateFormat正确格式化这段时间的正确方法?

Bal*_*usC 95

-07:00是ISO 8601时区表示法.SimpleDateFormat直到Java 7才支持此功能.因此,如果您可以升级到Java 7,那么您可以使用它X来表示该时区符号:

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ssX").create();
Run Code Online (Sandbox Code Playgroud)

Java 6上,您需要先进行一些模式匹配并替换JSON字符串-07:00,然后使用RFC 822表示法替换该部分,-0700以便您可以使用Z:

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").create();
Run Code Online (Sandbox Code Playgroud)

或通过一般时区表示法,GMT-07:00以便您可以使用z:

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ssz").create();
Run Code Online (Sandbox Code Playgroud)

  • 很好的回答,谢谢.我使用`Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX").create();`也得到毫秒.我还没有找到一种方法(除了使用自定义适配器)来支持这两种格式. (4认同)
  • 我正在使用Java 8(Android w/Retrolambda),我收到错误"java.lang.IllegalArgumentException:Unknown pattern character'X'" (2认同)

Lok*_*oki 11

对于Java 8(尚未验证Java 7),只需使用该模式

yyyy-MM-dd'T'HH:mm:ssXXX
Run Code Online (Sandbox Code Playgroud)

准确地获得格式2011-10-26T20:29:59-07:00.

时区模式来自Java Date Time - 自定义日期格式模式


Spa*_*Bao 6

我的api响应日期格式与您的完全相同,如下所示:

"weather": {
    "temperature": 31,
    "time": "2016-06-23T09:28:38+08:00"
}
Run Code Online (Sandbox Code Playgroud)

在Android项目中,我使用以下代码,两者都适合我.

Gson gson = new GsonBuilder()
       .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
       .create();

// or, also work
Gson gson = new GsonBuilder()
       .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
       .create();
Run Code Online (Sandbox Code Playgroud)

"yyyy-MM-dd'T'HH:mm:ssX"在Android中不起作用,虽然我已经使用了Java 8 build.gradle.

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
Run Code Online (Sandbox Code Playgroud)

我们怎么知道我们应该设置的日期格式,实际上你可以从以下源代码中找到答案SimpleDateFormat.java:

 * <p>Which produces this output when run in the America/Los_Angeles time zone:
 * <pre>
 *                     yyyy-MM-dd 1969-12-31
 *                     yyyy-MM-dd 1970-01-01
 *               yyyy-MM-dd HH:mm 1969-12-31 16:00
 *               yyyy-MM-dd HH:mm 1970-01-01 00:00
 *              yyyy-MM-dd HH:mmZ 1969-12-31 16:00-0800
 *              yyyy-MM-dd HH:mmZ 1970-01-01 00:00+0000
 *       yyyy-MM-dd HH:mm:ss.SSSZ 1969-12-31 16:00:00.000-0800
 *       yyyy-MM-dd HH:mm:ss.SSSZ 1970-01-01 00:00:00.000+0000
 *     yyyy-MM-dd'T'HH:mm:ss.SSSZ 1969-12-31T16:00:00.000-0800
 *     yyyy-MM-dd'T'HH:mm:ss.SSSZ 1970-01-01T00:00:00.000+0000
 * </pre>
Run Code Online (Sandbox Code Playgroud)