更新時(shí)間:2022-04-22 10:46:02 來源:動(dòng)力節(jié)點(diǎn) 瀏覽4659次
Java日期類型是大家要了解的,該類java.text.SimpleDateFormat用于根據(jù)您自己指定的格式模式解析和格式化日期。解析日期時(shí),JavaSimpleDateFormat通常從Java String解析日期。格式化日期時(shí),SimpleDateFormat通常將Date對(duì)象格式化為字符串,盡管它也可以將日期格式化為StringBuffer.
本文解釋了如何使用SimpleDateFormat類來格式化日期。
你創(chuàng)建一個(gè)SimpleDateFormat這樣的實(shí)例:
字符串模式 = "yyyy-MM-dd";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
pattern傳遞給構(gòu)造函數(shù) 的參數(shù)SimpleDateFormat 是用于解析和格式化日期的模式。模式語法將在本文后面介紹。該模式只是一個(gè)普通的 Java String。
創(chuàng)建SimpleDateFormat實(shí)例后,您可以使用其format()方法格式化日期。這是一個(gè)例子:
字符串模式 = "yyyy-MM-dd";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
字符串日期 = simpleDateFormat.format(new Date());
System.out.println(日期);
Date傳遞給format()方法的實(shí)例是一個(gè) 實(shí)例java.util.Date 。
上述SimpleDateFormat示例打印的輸出將是:
2018-09-09
請(qǐng)注意格式化的日期字符串是如何以年、月、日開頭的。日期字段的順序由傳遞給SimpleDateFormat構(gòu)造函數(shù)的日期模式確定。
JavaSimpleDateFormat類還能夠?qū)ate對(duì)象格式化為StringBuffer,而不是返回帶有日期格式的單個(gè)字符串。該類 SimpleDateFormat通過一個(gè)將,和一個(gè)實(shí)例作為參數(shù) 的format()方法版本來實(shí)現(xiàn)這一點(diǎn)。DateStringBufferFieldPosition
這是使用 Java 將日期格式化為 StringBuffer 的示例SimpleDateFormat:
StringBuffer stringBuffer = new StringBuffer();
現(xiàn)在日期 = 新日期();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
simpleDateFormat.format(now, stringBuffer, new FieldPosition(0));
目前尚不清楚如何FieldPosition使用該實(shí)例。無論 傳遞給構(gòu)造函數(shù)的值是 什么,該方法似乎都會(huì)format() 將格式化的字符串附加到末尾。StringBufferintFieldPosition
java.util.Date您可以使用實(shí)例的parse() 方法 將字符串解析為SimpleDateFormat實(shí)例。這是一個(gè)例子:
字符串模式 = "yyyy-MM-dd";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
日期日期 = simpleDateFormat.parse("2018-09-09");
執(zhí)行此代碼后,date變量將指向Date 表示 2018 年 9 月 9 日的實(shí)例。
您可以創(chuàng)建一個(gè)SimpleDateFormat針對(duì)特定 JavaLocale的實(shí)例。這樣做將根據(jù)Locale相關(guān)的日期格式化日期。例如,包含工作日名稱的格式化模式將以給定的語言編寫工作日Locale。這是一個(gè)例子:
字符串模式 = "EEEEE dd MMMMM yyyy HH:mm:ss.SSSZ";
簡(jiǎn)單日期格式 簡(jiǎn)單日期格式 =
新的 SimpleDateFormat(模式,新的區(qū)域設(shè)置(“da”,“DK”));
字符串日期 = simpleDateFormat.format(new Date());
System.out.println(日期);
此代碼打印的輸出可能是:
s?ndag 2018 年 9 月 9 日 09:53:17.013+0200
請(qǐng)注意工作日 (søndag = sunday) 和月份 (september) 是如何用丹麥語書寫的。
可以自定義格式化輸出中使用的日期符號(hào),用于特定的Locale. 您可以使用java.text.DateFormatSymbols實(shí)例來執(zhí)行此操作。這是一個(gè)例子:
區(qū)域設(shè)置 locale = new Locale("en", "UK");
DateFormatSymbols dateFormatSymbols = new DateFormatSymbols(locale);
dateFormatSymbols.setWeekdays(新字符串[]{
“沒用過”,
“悲傷的星期天”,
“狂躁星期一”,
“繁榮的星期二”,
“潮濕的星期三”,
“總星期四”,
“肥胖星期五”,
“超級(jí)星期六”,
});
字符串模式=“EEEEE MMMMM yyyy”;
簡(jiǎn)單日期格式 簡(jiǎn)單日期格式 =
新的 SimpleDateFormat(模式,dateFormatSymbols);
字符串日期 = simpleDateFormat.format(new Date());
System.out.println(日期);
首先為 UK 創(chuàng)建一個(gè)新DateFormatSymbols實(shí)例Locale。
其次,設(shè)置了一組新的工作日名稱。請(qǐng)注意,第一個(gè)字符串"unused" 從未使用過。此數(shù)組中的索引必須從 1 開始,才能被Calendar.SUNDAY等 Calendar.MONDAY常量索引。Calendar.SUNDAY常數(shù)是 1,Calendar.MONDAY 是 2 等等 。
第三個(gè) aSimpleDateFormat是使用創(chuàng)建的DateFormatSymbols,并且使用它格式化日期。由此打印的輸出可能如下所示:
超級(jí)星期六 2012 年 11 月
請(qǐng)注意如何使用自定義工作日名稱。
DateFormatSymbols您可以在實(shí)例 上設(shè)置更多日期格式符號(hào)。以下是可用于設(shè)置其他符號(hào)的方法:
dateFormatSymbols.setWeekdays();
dateFormatSymbols.setAmPmStrings();
dateFormatSymbols.setEras();
dateFormatSymbols.setLocalPatternChars();
dateFormatSymbols.setMonths();
dateFormatSymbols.setShortMonths();
dateFormatSymbols.setShortWeekdays();
dateFormatSymbols.setZoneStrings();
java.text.DateFormatSymbols有關(guān)這些方法和符號(hào)的更多詳細(xì)信息, 請(qǐng)參閱該類的 JavaDoc 。
到目前為止,本教程中顯示的示例均使用系統(tǒng)默認(rèn)時(shí)區(qū)。這意味著,如果您正在格式化日期,SimpleDateFormat則會(huì)假定您要根據(jù)系統(tǒng)的時(shí)區(qū)格式化該日期。但是,這可能并不總是您想要的。
SimpleDateFormat您可以使用其setTimeZone()方法 設(shè)置 a 的時(shí)區(qū)。該setTimeZone()方法將Java TimeZone 實(shí)例 ( java.util.TimeZone) 作為參數(shù)。下面是一個(gè)示例,展示了如何設(shè)置 JavaSimpleDateFormat實(shí)例的時(shí)區(qū):
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
simpleDateFormat1.setTimeZone(TimeZone.getTimeZone("歐洲/巴黎"));
設(shè)置時(shí)區(qū)后,SimpleDateFormat將更改其格式。這是一個(gè)將時(shí)區(qū)設(shè)置為兩個(gè)不同時(shí)區(qū)的示例,并為每個(gè)時(shí)區(qū)設(shè)置相同的日期:
現(xiàn)在日期 = 新日期();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Europe/London"));
System.out.println(simpleDateFormat.format(now));
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Europe/Paris"));
System.out.println(simpleDateFormat.format(now));
此示例打印的輸出類似于:
2018-09-09 10:43:54+0100
2018-09-09 11:43:54+0200
注意格式化日期的+0100和+0200部分。這些指示時(shí)間格式化為哪個(gè)時(shí)區(qū)。順便說一句,倫敦比 UTC / GMT 早 1 小時(shí),而巴黎比 2 小時(shí)早,是因?yàn)橄牧顣r(shí)。在冬季期間,時(shí)區(qū)偏移量將是+0000和 +0100。
有時(shí)您可能希望Date根據(jù)ISO 日期格式格式化a 。更具體地說, ISO 8601 日期格式。ISO 8601 日期格式(以下簡(jiǎn)稱 ISO 日期格式)如下所示:
yyyy-MM-ddTHH:mm:ss:sssZ
ISO 8601 日期格式的優(yōu)勢(shì)在于,如果您對(duì)使用 ISO 8601 格式格式化的日期字符串進(jìn)行排序,則字符串實(shí)際上將按日期順序進(jìn)行排序。換句話說,字母順序與日期時(shí)間順序相同。
上述格式中唯一的新字符是T日期和時(shí)間之間的,以及 Z表示時(shí)區(qū)的模式末尾的 。兩者將在下面解釋。請(qǐng)注意,ISO 8601 日期格式似乎不包括其日期格式中的毫秒。
這T實(shí)際上是一個(gè)文字字符,必須位于 ISO 8601 日期字符串的日期和時(shí)間部分之間。例如:
2018-09-24T17:48:00
代表時(shí)區(qū)的Z字符可以是:
一個(gè)字面Z字符。在這種情況下,Z代表 UTC 時(shí)區(qū)。
使用以下模式之一編碼的時(shí)區(qū)字符串:
±hh:mm
±hhmm
±hh
在這些 ISO 時(shí)區(qū)格式中,JavaSimpleDateFormat類僅支持第二種格式 ( ),即以字符 +hhmm結(jié)尾的格式。Z
為了使用以 UTC 時(shí)區(qū)字符SimpleDateFormat結(jié)尾的 ISO 8601 格式創(chuàng)建 Java 實(shí)例 Z,您需要使用以下日期模式字符串:
yyyy-MM-dd'T'HH:mm:ss'Z'
請(qǐng)注意T和Z字符是如何用單引號(hào)字符括起來的。這是為了讓SimpleDateFormat類將它們視為要插入的文字字符,而不是試圖將它們解釋為代表日期的某些部分。如果不將 Tand字符括在單引號(hào)中,創(chuàng)建實(shí)例Z時(shí)會(huì)出現(xiàn)異常 。 以下是使用上述 ISO 8601 日期格式模式 SimpleDateFormat創(chuàng)建 Java 的示例:SimpleDateFormat
String isoDatePattern = "yyyy-MM-dd'T'HH:mm:ss'Z'";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(isoDatePattern);
String dateString = simpleDateFormat.format(new Date());
以下是SimpleDateFormat使用上述模式格式化的日期示例:
2018-09-24T18:01:24Z
為了根據(jù) ISO 8601 日期格式格式化日期,其時(shí)區(qū)與 UTC 不同,請(qǐng)?jiān)趧?chuàng)建 JavaSimpleDateFormat實(shí)例時(shí)使用以下日期模式:
yyyy-MM-dd'T'HH:mm:ssZ
請(qǐng)注意,該Z字符不再用單引號(hào)括起來。SimpleDateFormat以下是使用上述日期格式 創(chuàng)建 Java 的示例:
String isoDatePattern = "yyyy-MM-dd'T'HH:mm:ssZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(isoDatePattern);
String dateString = simpleDateFormat.format(new Date());
從上面的代碼示例生成的日期字符串將類似于以下內(nèi)容:
2018-09-24T18:09:24+0200
通過上述介紹,相信大家對(duì)使用SimpleDateFormat類進(jìn)行Java日期格式化已經(jīng)有所了解,大家如果想了解更多相關(guān)知識(shí),不妨來關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java在線學(xué)習(xí),里面的課程從入門到精通,通俗易懂,很適合沒有基礎(chǔ)的小伙伴學(xué)習(xí),希望對(duì)大家能夠有所幫助哦。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)