Java Jodatime:如何打印4位数的年份?

Java Jodatime:如何打印4位数的年份?,java,jodatime,Java,Jodatime,我使用Jodatime来设置日期的格式,并使用区域设置来设置特定于区域设置的格式。我希望我的日期格式为“17/06/2013”(分隔符必须取决于区域设置),我几乎可以用 DateTimeFormat.forStyle("S-").withLocale(myLocale) 给出了“17/06/13”(两位数年份)。样式“M-”给出了“17 juin 2013”(法语),这也不是我想要的 当然,我可以用“dd/MM/yyyy”这样的模式创建一个格式化程序,这将给我一个4位数的年份,但它不区分区域设

我使用Jodatime来设置日期的格式,并使用区域设置来设置特定于区域设置的格式。我希望我的日期格式为“17/06/2013”(分隔符必须取决于区域设置),我几乎可以用

DateTimeFormat.forStyle("S-").withLocale(myLocale)
给出了“17/06/13”(两位数年份)。样式“M-”给出了“17 juin 2013”(法语),这也不是我想要的

当然,我可以用“dd/MM/yyyy”这样的模式创建一个格式化程序,这将给我一个4位数的年份,但它不区分区域设置

我一直在寻找一种方法来修改用“S-”样式创建的格式化程序,但似乎不可能


获取具有这种行为的格式化程序的最简单方法是什么?

作为替代方法,您可以选择使用ISO标准日期格式,而不是本地化日期格式。ISODateTimeFormat.date()将返回“yyyy-MM-dd”的格式设置程序。

只需获取本地化短样式的模式,并将“yy”替换为“yyy”(如果它尚未出现)

String pattern = DateTimeFormat.patternForStyle("S-", locale);
if (!pattern.contains("yyyy")) {
    pattern = pattern.replace("yy", "yyyy");
}
DateTimeFormatter formatter = DateTimeFormat.forPattern(pattern);

这不是一个选择。我在GUI中向用户显示日期,并且必须为他们完全本地化。这包括分隔符,但也包括日期字段的顺序。ISO标准是一个国际标准,与区域设置无关,所以这就是为什么我似乎是一个可能的选择。您看过JodaTime中的DateTimeFormatterBuilder吗?似乎它可以创建你想要的。是的,我创建了,但我不知道如何打印特定于区域设置的分隔符。它似乎不受支持。这是创建模式的“最困难”部分,您需要从本地格式化的日期获取分隔符,并将其作为文本添加到生成器中。这当然是确定分隔符字符的一种可能性。不幸的是,这还不够。还有更多特定于语言环境的特性需要处理,比如日期字段的顺序,这很难确定。美国日期的格式类似于年月日,但普通人的格式类似于年月日:-)太棒了!这就是我一直在寻找的解决方案——非常感谢。