2014-08-28 62 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