本地服務器執行結果不同的一種情況——格式化日期未設定區域

      網友投稿 801 2022-05-30

      在德不在鼎。… 德之休明,雖小,重也;其奸回昏亂,雖大,輕也。… 鼎之輕重,未可問也。

      起源:本地100,線上200

      最近生產環境除了一個奇怪的事情:我司程序員張三在其本地調試運行某個功能模塊的代碼后,上線運行通過,但是發現其執行結果與預期不符合,而且,最最詭異的事情是,在其本地執行與預期結果是相符合的。

      本地與服務器執行結果不同的一種情況——格式化日期未設定區域

      簡單來說,一段程序在張三的電腦上運行,執行結果為100。將同樣的一段代碼放在服務器上執行,執行結果就變成200了。

      定位:打log

      為了找到問題,我們在代碼各個IF判斷位置插入日志,重新部署在服務器上執行,然后根據日志判斷其程序走向與定位問題。

      結果

      最終,我們定位到這樣一個方法:

      /** * 星期幾 * @param date * @return 星期幾 */ public static String getChineseWeek(Date date) { SimpleDateFormat EEEE = new SimpleDateFormat("EEEE"); return EEEE.format(date); }

      首先我們在本地運行一下這段代碼,編寫測試用例:

      @Test public void testSimpleDateFormate() { SimpleDateFormat EEEE = new SimpleDateFormat("EEEE"); System.out.println(EEEE.format(new Date())); }

      執行結果如下:

      星期四

      但是我們在服務器中,同樣的代碼,執行結果卻不同,如下所示:

      [INFO]-[Thread: catalina-exec-7699]-[com.jfinal.kit.LogKit.info()]: Thursday

      經過查詢發現,原來SimpleDateFormat是和其運行環境有關的。其完整文檔如下:

      public SimpleDateFormat(String pattern)

      使用給定模式SimpleDateFormat并使用默認的FORMAT語言環境的默認日期格式符號。 **注意:**此構造函數可能不支持所有區域設置。 要全面覆蓋,請使用DateFormat類中的工廠方法。

      這相當于調用SimpleDateFormat(pattern, Locale.getDefault(Locale.Category.FORMAT)) 。

      參數

      pattern - 描述日期和時間格式的模式

      異常

      NullPointerException - 如果給定的模式為空

      IllegalArgumentException - 如果給定的模式無效

      另請參見:

      Locale.getDefault(java.util.Locale.Category) , Locale.Category.FORMAT

      我們通常使用的格式:yyyy-MM-dd不論在中文環境下還是英文環境下輸出都是一樣的,而遇到星期這種表達,中文與英文出現了分期,那么,如何才能避免這種的表達形式的,那就是指明所使用的語言。

      如下所示:

      /** * 星期幾 * @param date * @return 星期幾 */ public static String getChineseWeek(Date date) { SimpleDateFormat EEEE = new SimpleDateFormat("EEEE", Locale.CHINESE); return EEEE.format(date); }

      如此便不會出現因為服務器區域設定不同而造成的格式不達預期的問題。

      設定區域方法的完整官方文檔如下:

      public SimpleDateFormat(String pattern, Locale locale)

      構造一個SimpleDateFormat使用給定的模式和給定的區域設置的默認日期格式符號。 **注意:**此構造函數可能不支持所有區域設置。 為了全面覆蓋,請使用DateFormat類中的工廠方法。

      參數

      pattern - 描述日期和時間格式的模式

      locale - 應使用日期格式符號的區域設置

      異常

      NullPointerException - 如果給定的模式或區域設置為空

      IllegalArgumentException - 如果給定的模式無效

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:git常用命令整理
      下一篇:Java 8計算兩個日期之間的月份
      相關文章
      亚洲AV成人无码网站| 亚洲成aⅴ人片在线观| 亚洲爆乳少妇无码激情| 亚洲黄色激情视频| 亚洲国产成人久久三区| 亚洲国产模特在线播放| 亚洲精品日韩专区silk| 亚洲成a人片毛片在线| 亚洲最大成人网色| 亚洲av午夜福利精品一区| 亚洲国产另类久久久精品 | 亚洲精品乱码久久久久66| 亚洲精品无码av人在线观看| 国产v亚洲v天堂无码网站| 国产精品国产亚洲精品看不卡| 亚洲国产精品VA在线观看麻豆| 亚洲va国产va天堂va久久| 亚洲国产精品VA在线看黑人| 亚洲第一成年男人的天堂| 久久丫精品国产亚洲av| 亚洲成无码人在线观看| 亚洲香蕉在线观看| 亚洲人成电影网站色| 精品久久亚洲一级α| 亚洲免费在线观看| 亚洲人成精品久久久久| 亚洲AV无码成人专区片在线观看 | 亚洲色偷偷色噜噜狠狠99网| 亚洲爆乳无码专区www| 国产精品亚洲色图| 久久精品国产亚洲7777| 亚洲产国偷V产偷V自拍色戒| 亚洲高清视频免费| 在线综合亚洲中文精品| 无码天堂va亚洲va在线va| ZZIJZZIJ亚洲日本少妇JIZJIZ| 亚洲人成人网站色www| 久久久久亚洲精品无码蜜桃| 亚洲av乱码一区二区三区香蕉| 亚洲人成自拍网站在线观看| 午夜亚洲av永久无码精品|