簡體   English   中英

使用DateFormat.getDateTimeInstance()。format(date);

[英]Using DateFormat.getDateTimeInstance().format(date);

在運行一些測試時,我遇到了以下問題。 使用時:

private String printStandardDate(Date date) {
    return DateFormat.getDateTimeInstance(
        DateFormat.SHORT, DateFormat.SHORT).format(date);
}

我發現這會產生不同的Date格式,具體取決於運行測試的位置。 所以在windows / eclipse本地我得到了一個結果:04/02/12 18:18但是在美國的Linux機器上我得到了2/4/12 6:18 PM

這會導致我的測試/構建失敗:

預期:<[04/02/12 18:18]>但是:<[2/4/12 6:18 PM]>

有誰能解釋這種行為?

這並不奇怪,這正是它應該如何工作的。

DateFormat.getDateTimeInstance的API文檔說:

獲取具有默認語言環境的給定日期和時間格式樣式的日期/時間格式化程序

Windows系統上的默認語言環境與美國的Linux機箱不同。

如果要精確控制日期和時間格式,請使用SimpleDateFormatSimpleDateFormat指定格式。 例如:

private String printStandardDate(Date date) {
    return new SimpleDateFormat("dd/MM/yy HH:mm").format(date);
}

更好的方法是重用SimpleDateFormat對象,但要注意它不是線程安全的(如果同時從多個線程調用該方法,如果這些線程使用相同的SimpleDateFormat對象,事情就會搞砸) 。

private static final DateFormat DATE_FORMAT =
    new SimpleDateFormat("dd/MM/yy HH:mm");

private String printStandardDate(Date date) {
    return DATE_FORMAT.format(date);
}

格式基於代碼中的默認語言環境。 如果要確保結果,必須確保使用特定的區域設置。 重載getDateTimeInstance方法以提供另一種方法 ,該方法接收您要用作參數的語言環境。

public static final DateFormat getDateTimeInstance(int dateStyle,
                             int timeStyle,
                             Locale aLocale)

如果在兩個測試環境中使用相同的區域設置,結果應該相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM