获取Java中特定于语言环境的日期/时间格式

时间:2019-01-17 07:31:19

标签: java locale date-format

我在Java中有用例,我们想要获取特定于语言环境的日期。我正在使用DateFormat.getDateInstance

final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM,
                Locale.forLanguageTag(locale)));

这会转换日期,但是ja-JP会将日期“ 2019年1月17日”转换为“ 2019/01/17”,但是我需要类似“ 2019年1月17日”的名称。对于所有其他语言环境,这可以正确翻译日期。

请告知是否还有其他方法可以做到这一点。

3 个答案:

答案 0 :(得分:3)

这对我有用:

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

答案 1 :(得分:1)

诀窍是使用java.time.format.FormatStyle.LONG

jshell> java.time.format.DateTimeFormatter.ofLocalizedDate(java.time.format.FormatStyle.LONG).withLocale(java.util.Locale.JAPAN)
$13 ==> Localized(LONG,)

jshell> java.time.LocalDate.now().format($13)
$14 ==> "2019年1月17日"

答案 2 :(得分:1)

只需提一下:SimpleDateFormat是格式化日期的一种旧方法,但BTW并不是线程安全的。从Java 8开始,有名为java.timejava.time.format的新软件包,您应该使用它们来处理日期。为了您的目的,您应该使用类ZonedDateTime进行以下操作:

ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("..."));

找出适用于日本的正确区域ID

ZoneId.getAvailableZoneIds()

稍后使用类DateTimeFormatter

正确格式化日期