2014-08-28 70 views
4

我有一個LocalDate,我想根據區域設置格式模式將日期和月份打印爲2位數字和年份爲4位數字。 其實,我可以使用DateTimeFormatter設置短日期,但不幸的是「我不能」更改默認模式...有沒有一種方法來做到這一點?從JodaTime的shortDate()格式更改日期格式

下面,我用一個例子來說明這一點:

Locale l = Locale.ITALIAN; 
LocalDate localDate = new LocalDate(2014, 8, 28); 
DateTimeFormatter formatterOutput1 = DateTimeFormat.shortDate().withLocale(l); 
System.out.println("Output1: " + formatterOutput1.print(localDate)); 

l = Locale.ENGLISH; 
DateTimeFormatter formatterOutput2 = DateTimeFormat.shortDate().withLocale(l); 
System.out.println("Output2: " + formatterOutput2.print(localDate)); 

這是結果:

Output1: 28/08/14 
Output2: 8/28/14 

所以,輸出是正確的,但我相信這一點:

Output1: 28/08/2014 
Output2: 08/28/2014 

如何更改默認模式?

謝謝!

回答

5

而不是使用shortDate()的方式來做到這一點是通過使用forStyle()使用S的日期和-的時間

DateTimeFormat.patternForStyle("S-", Locale.ITALIAN); 

然後做一個字符串替換該模式改變你yyyyyy

例子:

LocalDate localDate = new LocalDate(2014, 8, 28); 
String pattern = DateTimeFormat.patternForStyle("S-", Locale.ITALIAN); 
pattern = pattern.replace("yy", "yyyy"); 
DateTimeFormatter formatterOutput1 = DateTimeFormat.forPattern(pattern); 
System.out.println("Output1: " + formatterOutput1.print(localDate)); 

,它將打印:

Output1: 28/08/2014 

也是一樣用英語語言環境:

String patternEnglish = DateTimeFormat.patternForStyle("S-", Locale.ENGLISH); 
patternEnglish = patternEnglish.replace("yy", "yyyy"); 
DateTimeFormatter formatterOutput2 = DateTimeFormat.forPattern(patternEnglish); 
System.out.println("Output2: " + formatterOutput2.print(localDate)); 

,它將打印:

Output2: 8/28/2014 

注意,這種方法你不如果你只關心ma,就不用擔心所有Locale格式國王的年份第4位數字。

+1

哇!完善!它工作得很好!謝啦! :) – user3449772 2014-08-28 15:03:28

2

你應該編寫自己的格式模式。在您的特定情況下,這將是:

DateTimeFormatter formatterOutput1 = DateTimeFormat.forPattern("dd/MM/yyyy"); 
DateTimeFormatter formatterOutput2 = DateTimeFormat.forPattern("MM/dd/yyyy"); 
+0

是的,可能是一個解決方案...但我需要分開每個語言環境。我認爲上述解決方案是最正確的!不管怎麼說,還是要謝謝你! :) – user3449772 2014-08-28 15:04:39

+1

雖然[其他答案](http://stackoverflow.com/a/25551380/642706)在技術上是正確的,我同意這個答案。或者讓[Locale](http://docs.oracle.com/javase/8/docs/api/java/util/Locale.html)和['forStyle'](http://www.joda.org/ joda-time/apidocs/org/joda/time/format/DateTimeFormat.html#forStyle(java.lang.String))在本地化*或*中定義自己的模式。混合這兩個(改變本地化輸出)對我來說似乎是一種破綻,並可能導致問題。 – 2014-08-28 15:08:02

+0

好吧,主要問題是我的java項目(android應用程序)的國際化進程。在英格蘭(例如),日期格式與德國/法國/意大利等不同......用戶必須根據她的區域設置查看正確的格式。 我只能使用forPattern()方法,但不是基於Locale。與以前的解決方案,我可以管理每個日期格式併發送給用戶正確的輸出... 我認爲... :) – user3449772 2014-08-29 07:54:03