91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

msf4j微服務框架中ParseException: Unparsable date: "2019-01-01 00:00:00"異常怎么處理

發布時間:2021-10-20 17:33:37 來源:億速云 閱讀:177 作者:柒染 欄目:大數據

本篇文章給大家分享的是有關msf4j微服務框架中ParseException: Unparsable date: "2019-01-01 00:00:00"異常怎么處理,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

最近遇到一個問題,前端接口在往后端接口傳值的時候,時間字符串(比如:2019-01-01 00:00:00)轉 timestamp 出錯了,導致接口調用失敗,同樣的代碼,在windows上運行是OK的,但是到linux或者mac上就會出現異常,初步懷疑是Windows和linux/Mac的時區不一致導致的,于是在mac和Linux上輸出系統語言和系統區域,結果都是中文:

msf4j微服務框架中ParseException: Unparsable date: "2019-01-01 00:00:00"異常怎么處理

說明系統語言設置是沒問題的,于是接著使用debug模式一步一步找到異常的地方,終于發現了問題出現在這里:

msf4j微服務框架中ParseException: Unparsable date: "2019-01-01 00:00:00"異常怎么處理

msf4j微服務框架中ParseException: Unparsable date: "2019-01-01 00:00:00"異常怎么處理

根據msf4j的源代碼所呈現時間轉換邏輯:

  1. 在類 DateTypeAdapter中,聲明了3個用于轉換的DateFormat 實例,分別是:

  • enUsFormat 美國語言

  • localFormat 本地語言

  • iso8601Format iso8601標準

  1. 接下來調用轉換方法private synchronized Date deserializeToDate(String json)string轉換為Date對象,完成轉換

不過很不幸的是,在linux 和 mac中,全都轉換失敗,只有在windows下才會轉換成功,通過在debug模式下查找,發現原因在創建DateFormat實例的時候DateFormat.getDateTimeInstance(),mac模式下獲取到的locale是en_CN

msf4j微服務框架中ParseException: Unparsable date: "2019-01-01 00:00:00"異常怎么處理

windows模式下獲取到的locale是zh_CN:

msf4j微服務框架中ParseException: Unparsable date: "2019-01-01 00:00:00"異常怎么處理

所以問題就在en_CNzh_CN這里,其中,enzh表示的是系統語言,en表示英語(一般指美國英語),zh表示中文,CN表示國家-中國,換個方式看可能更好理解:

        Locale locale = Locale.getDefault();
        System.out.println(locale.getLanguage());//輸出系統語言代碼
        System.out.println(locale.getCountry());//輸出系統國家代碼
        System.out.println(locale.getDisplayLanguage());//輸出系統語言名稱
        System.out.println(locale.getDisplayCountry());//輸出系統國家名稱

輸出結果為:

msf4j微服務框架中ParseException: Unparsable date: "2019-01-01 00:00:00"異常怎么處理

不過即使輸出為中文和中國,但是也還有可能出錯,因為在實例 DateFormat localFormat = DateFormat.getDateTimeInstance(2, 2) 創建的過程中,并不需要指定locale,該方法會去使用一個系統默認語言Local.Category.Format:

public final static DateFormat getDateTimeInstance(int dateStyle,
                                                       int timeStyle)
    {
        return get(timeStyle, dateStyle, 3, Locale.getDefault(Locale.Category.FORMAT));
    }

這時候如果mac系統中的語言是中文加上英文,像這樣:

msf4j微服務框架中ParseException: Unparsable date: "2019-01-01 00:00:00"異常怎么處理

Locale.Category.Format獲取到的language就會是en,所以就變成了en_CN(英文_中國),然后轉換就是失敗了

所以解決辦法就是在創建DateFormat實例之前,給jvm設置Locale.setDefault(Locale.CHINA),這樣就避免了jvm在查找系統語言的過程中找到除了中文語言之外的其他語言,造成轉換失敗的異常

當然,如果把英文刪除,只保留中文,則不用設置LocaleCHINA也沒問題了,所以linux 上也是如此,在系統語言中,設置了不止一個中文語言,還包括英語,雖然第一語言是中文。

以上就是msf4j微服務框架中ParseException: Unparsable date: "2019-01-01 00:00:00"異常怎么處理,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

潞城市| 苏尼特左旗| 定襄县| 巴中市| 开阳县| 苗栗市| 泸州市| 梁平县| 方正县| 大城县| 雅江县| 平潭县| 南通市| 吉木乃县| 鹤峰县| 岱山县| 德保县| 鱼台县| 长海县| 庆云县| 稻城县| 收藏| 灵璧县| 宜黄县| 资中县| 锦屏县| 台东县| 呼图壁县| 天镇县| 互助| 宾川县| 澄迈县| 全州县| 松溪县| 鲜城| 施甸县| 虹口区| 阜平县| 昭觉县| 丽水市| 峨眉山市|