在JodaTime中从shortDate()格式更改日期模式

use*_*772 4 java datetime locale date jodatime

我有一个LocalDate,我想根据Locale格式模式将日期和日期打印为2位数,将年份打印为4位数.实际上,我可以使用DateTimeFormatter来设置短日期,但不幸的是"我不能"更改默认模式......有没有方法可以做到这一点?

下面,我用一个例子解释一下:

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));
Run Code Online (Sandbox Code Playgroud)

这是结果:

Output1: 28/08/14
Output2: 8/28/14
Run Code Online (Sandbox Code Playgroud)

所以,输出是正确的,但我希望这样:

Output1: 28/08/2014
Output2: 08/28/2014
Run Code Online (Sandbox Code Playgroud)

如何更改默认模式?

谢谢!

gtg*_*ola 5

而不是使用shortDate()方法来forStyle()使用Sfor Date和-for Time

DateTimeFormat.patternForStyle("S-", Locale.ITALIAN);
Run Code Online (Sandbox Code Playgroud)

然后在Pattern上执行String替换以将其更改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));
Run Code Online (Sandbox Code Playgroud)

哪个会打印:

Output1: 28/08/2014
Run Code Online (Sandbox Code Playgroud)

与ENGLISH Locale相同:

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

哪个会打印:

Output2: 8/28/2014
Run Code Online (Sandbox Code Playgroud)

请注意,使用此方法,如果您只关心使YEAR部分为4位数,则无需担心所有Locale格式.