2012-05-04 65 views
4

我顯示的日期範圍如下:什麼是I18N友好的方式來顯示日期範圍?

public static void main(String[] args) { 
    Locale.setDefault(new Locale("nl", "NL")); 

    DateTime d1 = new DateTime(); 
    DateTime d2 = new DateTime().plusDays(30); 

    final String s1 = d1.toString(DateTimeFormat.shortDate()); 
    final String s2 = d2.toString(DateTimeFormat.shortDate()); 

    System.out.println(s1 + "-" + s2); // shows "4/05/12-3/06/12" for en_AU 
    System.out.println(s1 + "-" + s2); // shows "4-5-12-3-6-12" for nl_NL 
} 

在荷蘭的用戶,他們看到 「4-5-12-3-6-12」。這很混亂。

什麼是顯示將用戶的語言環境考慮在內的日期範圍的方法?

+0

我不知道如果4/5/12是5月4日或4月5日。怎麼樣2012年5月4日 - 2012年6月3日?月份的縮寫將與地區相關。 –

回答

5

在本地化應用程序,這種分離將由翻譯人員在翻譯您的資源包時決定:

#foo.properties 
#comment: a date range 
dateRange={0,date}-{1,date} 

可能變成:

#foo_en.properties 
dateRange={0,date} to {1,date} 

這可以然後使用MessageFormat類型進行處理。形式如下:

//untested code 
MessageFormat mf = new MessageFormat(formatString, locale); 
//java.util.Date instances 
Object[] range = {date1, date2}; 
String result = mf.format(range); 

即使您沒有提供完整的翻譯,這種方法可能適用於某些本地化。

+0

我想我真的知道這是正確的答案,但我懶惰的一方希望它不是。那麼,該應用程序是完全可以翻譯的資源包,所以這將是一條路。 –

1

也許使用省略號(...)而不是短劃線?

1

至少要用更多的空間周圍的值:

"4-5-12 - 3-6-12" 

4位數的一年是,據我所知,可以理解在各個地區:

"4-5-2012 - 3-6-2012" 

固定數量的數字可能會或可能不會是你的口味:

"04-05-2012 - 03-06-2012" 

我沒有看到從第二到第三種形式有太大的改善,但到了第二,有。我們都更經常地接觸比較小的數字,而數字更少。 11,12和13經常穿過你的路,但如果你看到2011,2012和2013年,那幾年以來,大部分都是在日期之內。

+0

另請注意,國際日期格式是年月日,以避免混淆月份和日期的順序。 – Sprachprofi

+0

@Sprachprofi:有沒有像國際日期格式?它在哪裏定義?從其他範圍來看,有很多國際測量稱爲公制系統,特別是美國不符合 - 參見英寸,加侖,磅,英尺,碼,英里......以及:「考慮用戶區域設置「是問題的一部分。 –

+0

例如,ISO有一些顯示日期的標準,例如YYYY-MM-DD格式。但通常,我的用戶會喜歡看到他們習慣的格式的日期。 –

1

您可以使用:

SimpleDateFormat sdf; 

// Create new SimpleDateFormat object that returns default pattern. 
sdf = new SimpleDateFormat(); 
String dateFormat = sdf.format(date); 
System.out.println("Date by SimpleDateFormat class : " + dateFormat); 

,輸出是:

日期通過的SimpleDateFormat類:08年6月14日下午1:15