簡體   English   中英

如何以“mmm dd”格式獲取 nl_NL 語言環境的日期?

[英]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 個字符的偽區域,例如PSTCSTIST 這些值不是標准化的,甚至不是唯一的!

實時時區名稱采用Continent/ Region格式,例如Africa/TunisAsia/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 ) ;

請參閱在 IdeOne.com 上實時運行的代碼

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") ,帶有單獨的languagecountry參數,或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.

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