1. 程式人生 > 其它 >在 windows 和 linux 環境下,SimpleDateFormat 轉換格式不一致的問題

在 windows 和 linux 環境下,SimpleDateFormat 轉換格式不一致的問題

在 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 環境下

問題解決!