ISO 8601,毫秒和Retrofit

时间:2015-08-29 11:35:21

标签: java android date gson iso8601

在使用改装并尝试读取这样的日期时,我无法正确设置日期格式:

2015-08-29T11:22:09.815479Z

我设置的GSON转换器是这样的:

GsonConverter gsonConverter = new GsonConverter(
     new GsonBuilder()
            .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSz")
            .create()
);

有关问题的任何线索?

2 个答案:

答案 0 :(得分:6)

Java Date具有毫秒精度,因此我一直在创建Gson对象,如下所示:

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

当然,在这种情况下,无论您放置SSS还是SSSSSS,微秒都会被截断。还假设转换后的字符串的最后一个字符始终为Z

要解释为什么您的模式不起作用,您使用z(小写z),根据文档代表General Timezone(例如Pacific Standard Time; PST; GMT-08:00)。此外,如果您使用Z(大写Z),它也不会起作用,因为它代表RFC 822 time zone(例如,-0800)。

在另一种情况下,您可以使用{{1而不是Z您有时区偏移(例如-08-0800-08:00)。 },XXX代表ISO 8610 time zone。但这需要Java 7或8(我不认为Android目前与Java 8兼容)。

另一种方法是编写自己的XXX Serializer and Deserializer;虽然我没有尝试过。

它也值得看java.sql.TimestampGson同样支持Gson并具有更精细的精度(纳秒),但它也是我的选择&#39 ; t探索。

答案 1 :(得分:0)

Java 8 Instant类可用于轻松解析ISO-8601时间戳,而无需显式设置格式字符串,例如:

String input = "2018-11-07T00:25:00.073876Z";
Instant instant = Instant.parse(input);