你不需要一个XMLGregorianCalender
. 它不会,不能给你你所要求的。相反,您需要 aLocalDate
和 a DateTimeFormatter
:
DateTimeFormatter italianDateFormatter
= DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
.withLocale(Locale.ITALIAN);
LocalDate date = LocalDate.now(ZoneId.of("Europe/Rome"));
String formattedDate = date.format(italianDateFormatter);
System.out.println(formattedDate);
当我今天运行这段代码时,输出是:
21/01/19
与您要求的不同之处在于两位数的年份,19
. 如果我们不FormatStyle.SHORT
使用FormatStyle.MEDIUM
,我们会得到四位数的年份,但月份是三个字母的缩写:
21 根 2019
优点是代码非常适合国际化:您只需要更改语言环境即可获得适用于其他语言和国家/地区的正确代码。如果您确实需要21/01/2019
(使用四位数年份),请使用模式明确指定格式:
DateTimeFormatter italianDateFormatter
= DateTimeFormatter.ofPattern("dd/MM/uuuu");
21/01/2019
使用有什么问题XMLGregorianCalendar
?
当您调用时System.out.println(xmlDate)
,您是在隐式调用toString
您的XMLGregorianCalendar
. 当它没有时间和区域偏移时,toString
总是生成yyyy-MM-dd
格式,你无法改变它。另一方面,您可以在String
. 下一个障碍是,没有可以XMLGregorianCalendar
直接格式化的格式化程序。您需要先转换为不同的类型,ZonedDateTime
例如,首先。由于您只需要日期,而不是一天中的时间或时区,因此LocalDate
从一开始就更简单、更容易。尤其是对于那些在您之后阅读和维护您的代码的人。
您的问题提到java.util.Date
并且您的代码也使用GregorianCalendar
了。这两个类都设计得很糟糕,而且早已过时,完全被现代 Java 日期和时间 API 的 java.time 所取代。所以我建议你不要使用它们。
关联
Oracle 教程:日期时间解释如何使用 java.time,现代 Java 日期和时间 API。