1. 程式人生 > >Java 根據國家語言的時間格式化

Java 根據國家語言的時間格式化

總所周知,java的時間格式化使用SimpleDateFormat類中的#format和#parse方法,但是這個根據JVM的語言、國家來確定的對格式的解析,例如yyyy MMM dd 對於不同的國家語言是不一樣的。

Date date = new Date();
        DateFormat sdf = new SimpleDateFormat("yyyy MMM dd HH:mm:ss");
        System.out.println(sdf.format(date));

輸出結果為:2016 十一月 24 14:35:19
API中對 M的解釋為:

  • 如果模式字母的數量為 3 或大於 3,則將月份解釋為 text;否則解釋為 number。

    由於系統的語言環境是中文,所以這裡月份的輸出的十一月 。
    但是我想輸出的月份是Nov怎麼辦呢?
    上文中提到SimpleDateFormat是根據JVM的國家和語言來進行模式解析的,顯然 Nov不符合中國的。當然可以通過改變windows系統的國家語言設定,也可以通過程式碼來實現 ,只需要新增一句話:

Locale.setDefault(Locale.US);

也可以使用SimpleDateFormat的構造方法SimpleDateFormat(String pattern, Locale locale)
修改後的程式碼:

Date date = new Date();
Locale.setDefault
(Locale.US); DateFormat sdf = new SimpleDateFormat("yyyy MMM dd HH:mm:ss"); DateFormat sdf_locale = new SimpleDateFormat("yyyy MMM dd HH:mm:ss",Locale.US); System.out.println(sdf.format(date)); System.out.println(sdf_locale.format(date));

程式碼的輸出為:2016 Nov 24 14:41:19

使用parse時同理,在new SimpleDateFormat之前設定JVM 的預設語言環境就可以。

可以想到的應用場景:在開發網路爬蟲時,遇到國外的網站 大多以 月份的簡寫或單詞 不是以數字的形式,需要把時間換成成距離1970年1月1日的毫秒數(Date#getTime方法),或者轉換成自己的時間表達格式。