在 Java 中获取特定于语言环境的 date/time 格式
Get locale specific date/time format in Java
我在 java 中有一个用例,我们想要获取语言环境特定日期。我正在使用 DateFormat.getDateInstance
final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM,
Locale.forLanguageTag(locale)));
这会翻译日期,但 ja-JP 会将日期“2019 年 1 月 17 日”翻译成“2019/01/17”,但我需要类似“2019 年 1 月 17 日”的日期。对于所有其他语言环境,这会正确翻译日期。
请告知是否有其他获取方法。
这对我有用:
public static void main(String[] args) throws IOException {
final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, Locale.JAPAN);
Date today = new Date();
System.out.printf("%s%n", dateFormat.format(today));
}
和MEDIUM
完全按照你说的去做
UPD:或按照 Michael Gantman 的建议使用更新的 ZonedDataTime:
public static void main(String[] args) throws IOException {
ZonedDateTime zoned = ZonedDateTime.now();
DateTimeFormatter pattern = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).withLocale(Locale.JAPAN);
System.out.println(zoned.format(pattern));
}
诀窍是使用java.time.format.FormatStyle.LONG
:
jshell> java.time.format.DateTimeFormatter.ofLocalizedDate(java.time.format.FormatStyle.LONG).withLocale(java.util.Locale.JAPAN)
==> Localized(LONG,)
jshell> java.time.LocalDate.now().format()
==> "2019年1月17日"
顺便提一下:SimpleDateFormat
是格式化日期的旧方法,BTW 不是线程安全的。自 Java 8 以来,有名为 java.time
和 java.time.format
的新包,您应该使用它们来处理日期。为了您的目的,您应该使用 class ZonedDateTime 做这样的事情:
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("..."));
要找出日本的正确区域 ID,请使用
ZoneId.getAvailableZoneIds()
稍后要正确格式化您的日期,请使用 class DateTimeFormatter
我在 java 中有一个用例,我们想要获取语言环境特定日期。我正在使用 DateFormat.getDateInstance
final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM,
Locale.forLanguageTag(locale)));
这会翻译日期,但 ja-JP 会将日期“2019 年 1 月 17 日”翻译成“2019/01/17”,但我需要类似“2019 年 1 月 17 日”的日期。对于所有其他语言环境,这会正确翻译日期。
请告知是否有其他获取方法。
这对我有用:
public static void main(String[] args) throws IOException {
final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, Locale.JAPAN);
Date today = new Date();
System.out.printf("%s%n", dateFormat.format(today));
}
和MEDIUM
完全按照你说的去做
UPD:或按照 Michael Gantman 的建议使用更新的 ZonedDataTime:
public static void main(String[] args) throws IOException {
ZonedDateTime zoned = ZonedDateTime.now();
DateTimeFormatter pattern = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).withLocale(Locale.JAPAN);
System.out.println(zoned.format(pattern));
}
诀窍是使用java.time.format.FormatStyle.LONG
:
jshell> java.time.format.DateTimeFormatter.ofLocalizedDate(java.time.format.FormatStyle.LONG).withLocale(java.util.Locale.JAPAN)
==> Localized(LONG,)
jshell> java.time.LocalDate.now().format()
==> "2019年1月17日"
顺便提一下:SimpleDateFormat
是格式化日期的旧方法,BTW 不是线程安全的。自 Java 8 以来,有名为 java.time
和 java.time.format
的新包,您应该使用它们来处理日期。为了您的目的,您应该使用 class ZonedDateTime 做这样的事情:
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("..."));
要找出日本的正确区域 ID,请使用
ZoneId.getAvailableZoneIds()
稍后要正确格式化您的日期,请使用 class DateTimeFormatter