在 windows 和 linux 環境下,SimpleDateFormat 轉換格式不一致的問題
阿新 • • 發佈:2021-07-07
在 windows 和 linux 環境下,SimpleDateFormat 轉換格式不一致的問題
1、問題提出
首先,我們這裡有個需求,需要根據 yyyy-MM-dd 格式的時間的字串,獲取這天是周幾。
2、分析
通過 SimpleDateFormat ,把字串形式,yyyy-MM-dd 格式的日期先轉化為 Date 型別的日期。
再通過 SimpleDateFormat ,通過 Date 型別,獲取周幾的資訊。
3、編寫程式碼
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class WeekTest { public static String getWeek(String dateStr) { // yyyy-MM-dd SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date = null; try { date = simpleDateFormat.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } SimpleDateFormat simpleDateFormatWeek = new SimpleDateFormat("E"); return simpleDateFormatWeek.format(date); } public static void main(String[] args) { String dateStr = "2021-07-26"; System.out.println(dateStr); System.out.println(getWeek(dateStr)); } }
4、測試
本地測試結果沒問題,2021-07-26 是 星期一。
5、linux 環境下,發現問題
專案一般會部署到 linux 環境下。這時候,發現在 linux 環境下執行程式碼, SimpleDateFormat 格式化時間戳時,返回了英文。
6、分析問題
主要原因就是,當只傳遞日期格式引數時,SimpleDataFormat 會呼叫系統預設的時間設定,
windows 通常為 zh,而 linux 通常為 en ,所以會出現轉換格式不一致的問題。
7、解決問題
根據自己的需求,在建立 SimpleDateFormat 時,傳遞對應的引數即可。
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class WeekTest { public static String getWeek(String dateStr) { // yyyy-MM-dd SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date = null; try { date = simpleDateFormat.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } // SimpleDateFormat simpleDateFormatWeek = new SimpleDateFormat("E"); SimpleDateFormat simpleDateFormatWeek = new SimpleDateFormat("E", Locale.CHINESE); // SimpleDateFormat simpleDateFormatWeek = new SimpleDateFormat("E", Locale.ENGLISH); return simpleDateFormatWeek.format(date); } public static void main(String[] args) { String dateStr = "2021-07-26"; System.out.println(dateStr); System.out.println(getWeek(dateStr)); } }
8、再次測試
在本地 windows 環境下
在 linux 環境下
問題解決!