簡體   English   中英

在Java中獲取特定於語言環境的日期/時間格式

[英]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:或使用更新的ZonedDataTime ,Michael Gantman建議:

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)
$13 ==> Localized(LONG,)

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

SimpleDateFormatSimpleDateFormat是一種格式化日期的舊方法,BTW不是線程安全的。 從Java 8開始,有一些名為java.timejava.time.format新包,您應該使用它們來處理日期。 為了您的目的,您應該使用類ZonedDateTime做這樣的事情:

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

找出日本使用的正確區域ID

ZoneId.getAvailableZoneIds()

稍后將格式化您的日期正確使用類DateTimeFormatter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM