簡體   English   中英

ISO 8601,毫秒和Retrofit

[英]ISO 8601 with milliseconds and Retrofit

在使用改造並嘗試讀取這樣的日期時,我無法正確設置日期格式:

2015-08-29T11:22:09.815479Z

我設置的GSON轉換器是這樣的:

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

什么問題的線索?

Java Date具有毫秒級的精度,因此我一直在創建Gson對象:

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

當然,在這種情況下,無論你使用SSS還是SSSSSS ,微秒都會被截斷。 還假設轉換后的字符串的最后一個字符始終為Z

為了解釋為什么你的模式不起作用,你使用z (小寫z),根據文檔表示一般時區 (例如, Pacific Standard Time; PST; GMT-08:00 )。 此外,如果您使用Z (大寫Z),它也將無法工作,因為它代表RFC 822時區 (例如, -0800 )。

在另一種情況下,您可以使用XXXXXX來代替ISO 8610時區 ,而不是Z ,而是具有時區偏移(例如, -08-0800-08:00 )。 但這需要Java 7或8(我不認為Android目前與Java 8兼容)。


另一種方法是編寫自己的Gson Serializer和Deserializer ; 雖然我沒試過。

它也值得看看Gson也支持的java.sql.Timestamp類,並且具有更精細的精度(納秒),但它也是我沒有探索的選項。

Java 8 Instant類可用於輕松解析ISO-8601時間戳,而無需顯式設置格式字符串,例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM