[英]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日"
SimpleDateFormat
: SimpleDateFormat
是一種格式化日期的舊方法,BTW不是線程安全的。 從Java 8開始,有一些名為java.time
和java.time.format
新包,您應該使用它們來處理日期。 為了您的目的,您應該使用類ZonedDateTime做這樣的事情:
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("..."));
找出日本使用的正確區域ID
ZoneId.getAvailableZoneIds()
稍后將格式化您的日期正確使用類DateTimeFormatter
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.