[英]How to get date in “mmm dd” format for nl_NL locale?
我想在 jave 中獲取 nl_NL 語言環境的日期
Calendar calendar = Calendar.getInstance();
DateFormat df = new SimpleDateFormat(Pattern, new Locale("nl_NL"));
df.setTimeZone(TimeZone.getTimeZone("PST"));
String expectedDate = df.format(calendar.getTime()).toLowerCase();
System.out.println("Date in PST Timezone : " + expectedDate);
return expectedDate;
我沒有得到正確的 nl_NL 格式!
有人可以幫我嗎?
切勿使用 2-4 個字符的偽區域,例如PST
、 CST
或IST
。 這些值不是標准化的,甚至不是唯一的!
實時時區名稱采用Continent/ Region
格式,例如Africa/Tunis
或Asia/Tokyo
。 對於美國大部分西海岸的時區,如果這是您所說的PST
,請使用America/Los_Angeles
。
ZoneId z = ZoneId.of( "America/Los_Angeles" ) ;
永遠不要使用可怕的遺留日期時間類,例如Calendar
。 僅使用java.time類。
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
通過將時區名稱附加在方括號中,生成標准 ISO 8601 格式的文本。
String output = zdt.toString() ;
本地化荷蘭語和荷蘭文化的文本表示。
Locale locale = new Locale( "nl" , "NL" ) ;
DateTimeFormatter f =
DateTimeFormatter
.ofLocalizedDateTime( FormatStyle.FULL )
.withLocale( locale )
;
String output = zdt.format( f ) ;
2020-07-17T09:30:58.183568-07:00[美國/洛杉磯]
vrijdag 2020 年 7 月 17 日上午 09:30:58 Pacific-zomertijd
搜索以了解更多信息。 所有這些都已經在 Stack Overflow 上解決了很多次。
我沒有得到正確的 nl_NL 格式
那是因為new Locale("nl_NL")
是錯誤的。 它必須是new Locale("nl", "NL")
,帶有單獨的language
和country
參數,或Locale.forLanguageTag("nl-NL")
,帶有languageTag
參數,在值中使用破折號。 它從不帶有下划線。
這也是因為日期模式"mmm dd"
是錯誤的。 它必須是"MMM dd"
,大寫的 M 表示month ,而不是表示minute的小寫。
最后,使用時區PST
是錯誤的,因為它沒有明確定義。 它可以表示“皮特凱恩標准時間”或“太平洋標准時間”,甚至第二個也是錯誤的,因為美國太平洋沿岸目前正在觀察PDT
(太平洋夏令時間)。 正確的時區是America/Los_Angeles
。
將這些修復應用於問題代碼:
Calendar calendar = Calendar.getInstance();
DateFormat df = new SimpleDateFormat("MMM dd", new Locale("nl", "NL"));
df.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
String expectedDate = df.format(calendar.getTime()).toLowerCase();
System.out.println("Date in PST Timezone : " + expectedDate);
Output
Date in PST Timezone : jul. 17
當然,對於僅日期值,時區並不真正適用,但確實如此。
但是,您應該使用較新的 Java 8 時間 API。
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("MMM dd", new Locale("nl", "NL"));
String date = MonthDay.now(ZoneId.of("America/Los_Angeles")).format(fmt);
System.out.println("Date : " + date);
Output
Date : jul. 17
您也可以使用LocaleDate.now(...)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.