2、 java.util.Date類 html
// 當前日期時間 Date now = new Date(); /* 因爲程序的默認時區不一樣,可能顯示以下內容: * 1. 格林尼治時間,Tue Oct 28 01:24:14 GMT 2014 * 2. 美國中部標準時間,Tue Oct 27 23:24:14 GST 2014 */ System.out.println(now);
從上面的示例能夠知道除了 java.util.Date類 外咱們還要了解時區 java.util.TimeZone 這個類才能獲得須要的日期信息。java
3、 java.util.TimeZone類 app
示例1:spa
// 獲取默認時區(最初始時由JVM決定的) TimeZone defaultTZ = TimeZone.getDefault(); // 顯示sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] System.out.println(defaultTZ);
示例2:.net
// 設置東八區爲當前時區 TimeZone e8 = TimeZone.getTimeZone("GMT+8"); TimeZone.setDefault(e8); // 顯示sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] System.out.println(TimeZone.getDefault())
TimeZone.getTimeZone() 的入參爲時區ID,能夠經過 TimeZone.getAvaliableIDs() 可獲取可用的時區ID。 code
好了,如今咱們有了日期時間源數據就能夠着手格式化了。orm
4、 Java代碼中的日期時間格式化 htm
1. java.text.SimpleDateFormat extends java.text.DateFormat 對象
做用:經過實例的 format() 方法將日期對象( java.util.Date )格式化爲文本,經過 parse() 方法將文本解析爲日期對象( java.util.Date )。blog
注意:在經過 SimpleDateFormat sdf = new SimpleDateFormat() 實例化時,會以當前的默認時區做爲後續格式化、解析操做的時區,即便後續代碼中從新設置默認時區也不會影響 SimpleDateFormat實例 的時區值。
// 初始化時設置 日期和時間模式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); // 修改日期和時間模式 sdf.applyPattern("yyyy/MM/dd HH:mm:ss.SSS") sdf.format(new Date());
查看源碼會發現其實 java.text.SimpleDateFormat 內部使用了 java.util.Calendar 來獲取 java.util.Date實例 的時分秒等部分,並進行格式化處理。
2. java.text.DateFormat
做用:內置了多種與特定的 DateFormatSymbols對象 綁定的formatter對象(也就是預設了日期時間模式)。
好處:方便對日期時間進行本地化。
缺點:沒法直接修改日期時間模式。
其內部是使用 java.text.SimpleDateFormat 來處理格式化的
3. java.util.Calendar
做用:用於萃取日期時間中的年、月、日、時、分、秒等信息,至於格式化就有咱們本身解決了。它有一個好處就是在初始Calendar實例時能夠設置使用的TimeZone。
Date date = new Date(); Calendar c1 = Calendar.getInstance(TimeZone.getTimeZone("GMT+8")); c1.set(date); cl.get(Calendar.YEAR); cl.get(Calendar.MONTH); cl.get(Calendar.DATE);
5、JSTL中的日期時間格式化
<fmt:formatDate/> 示例:
<% Date now = new Date(); %> <%-- 使用自定義日期時間模式來格式化 --%> <fmt:formatDate value="${now}" timeZone="GMT+8" type="date" pattern="MM-dd"/> <%-- 採用內置的日期時間模式來格式化 --%> <fmt:formatDate value="${now}" timeZone="GMT+8" dateStyle="short"/
<fmt:parseDate/> 示例:
<%-- 結果輸出到JspWriter中 --%> <fmt:parseDate value="2005/12/21" pattern="yyyy/MM/dd"/
6、再橫向理解
到這裏你們應該可經過 SimpleDateFormat實例 來格式化日期時間了,但總以爲 java.text.DateFormat 很差理解。下面介紹的 java.util.Locale 和 java.text.DateFormatSymbols 應該能夠幫助你們更好去理解。
1. java.util.Locale
做爲標識來表明特定地理位置、政治、文化區域。當某操做須要與特定的地理位置、政治、文化區域關聯時,咱們稱其爲locale-sensitive。(如處理貨幣、日期)<Br/>
`Locale`由「語言碼(language code)」和「地區碼(country code)」、「補充碼(variant 入參)」組成,其中「地區碼(country code)」和「補充碼(variant 入參)」爲可選。
語言碼(language code),由兩個小寫字母組成,如zh, en。命名規範:http://www.loc.gov/standards/iso639-2/englangn.html
地區碼(country code),由兩個大寫字母組成,如CN,US。命名規範:http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html
補充碼(variant 入參),因爲是規範以外的選項,所以沒有嚴格的格式規定,只規定多個值時,經過下劃線(_)鏈接各值便可。
各種型的碼採用下滑線(_)鏈接構成完整的Locale。
Locale示例(「語言碼(language code)」+「地區碼(country code)」): zh_CN 。
能夠自定義Locale對象,也可直接使用`java.util.Locale`內置的Locale對象。、
2. java.text.DateFormatSymbols
封裝了根據Locale對象來對日期時間本地化資源的操做。通常不直接使用該類,而是經過 DateFormat.getDateInstance() 等方法來獲取內置的formatter對象,該formatter對象已經綁定特定的 DateFormatSymbols對象
7、總結
上述內容只是引子,結合練習和源碼纔能有所深刻哦!
尊重原創,轉載請註明來自:http://www.cnblogs.com/fsjohnhuang/p/4054715.html ^_^肥仔John
8、參考
http://blog.csdn.net/sz_bdqn/article/details/2847589
http://blog.sina.com.cn/s/blog_6d818993010156zn.html
http://www.wanho.net/java/javanews/314.html