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

时间:2014-08-28 14:14:11

标签: java date datetime locale jodatime

我有一个LocalDate,我想根据Locale格式模式将日期和日期打印为2位数,将年份打印为4位数。 实际上,我可以使用DateTimeFormatter设置短日期,但不幸的是,#34;我不能"#34;更改默认模式...是否有方法可以执行此操作?

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

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

如何更改默认模式?

谢谢!

2 个答案:

答案 0 :(得分:5)

使用shortDate()使用forStyle()作为日期而S作为时间

,而不是使用-方法来实现它
DateTimeFormat.patternForStyle("S-", Locale.ITALIAN);

然后在模板上执行字符串替换,将yy更改为yyyy

示例:

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

与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));

将打印:

Output2: 8/28/2014

请注意,使用此方法如果您只关心使YEAR成为4位数字,则不必担心知道所有语言环境格式。

答案 1 :(得分:2)

您应该撰写自己的格式模式。在您的特定情况下,它将是:

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