java - 在 JodaTime 中更改 shortDate() 格式的日期模式

标签 java date datetime locale 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));

这是结果:

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

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

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

如何更改默认模式?

谢谢!

最佳答案

不使用 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 位数字,则不必担心了解所有区域设置格式。

关于java - 在 JodaTime 中更改 shortDate() 格式的日期模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25551011/

相关文章:

javascript - 需要将新日期与日期选择器进行比较

java - 如何在 Java 中访问另一个对象?

java - Android Wear 使用 deleteDataItems 删除 DataApi 上的数据

android - 如何获取在线文件的最后修改日期?

mysql - 多条件查询的 SQL 语句,包括 3 个最近的日期

sql - 日期时间函数 : semester, 季度

java - 我的密码生成器正在生成 Gamma 符号和分数。我如何解决它?

java - Jersey JAXB 如何为 List 实现 MessageBodyWriter

java - 新的 java.sql.Date(0) 不对应于 00 :00:00 1 January 1970

c# - 在 ASP.NET 中查找给定周(月)后的日期