Java魔法堂:Date與日期時間格式化

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

相關文章
相關標籤/搜索