2009年1月22日

Java:日期時間格式化輸出入處理:Date、Calendar、SimpleDateFormat


 
在使用Java的這些日子裡,
Java中的日期時間格式處理總是讓我覺得有些混亂不夠直覺。
例如我想要知道2009/1/1是星期幾,
那就要經過不少步的處理轉換才能得知正確的答案。

程式如下:
其中第一種方式可以接受我們常用的日期格式 2009/1/1 或 2009/01/01,
第二種看起來比較簡便但就必須自己把年月日分開再輸入呼叫程式,
其中年和日可以直接輸入2009和1,但月份的地方要特別注意,
最好使用 Calendar.月份的方式輸入,因Calendar.JANUARY的 int值是 0而非1
若直接以月份輸入的話會出錯!


(2011.11.24更新)
在程式的最下面補充如何格式化印出現在的時間。
只要先用 Date() 取得現在的日期時間,
再用SimpleDateFormat格式化即可。

 1 package demo;
 2 
 3 import java.text.DateFormat;
 4 import java.text.ParseException;
 5 import java.text.SimpleDateFormat;
 6 import java.util.Calendar;
 7 import java.util.Date;
 8 
 9 public class SimpleDateFormatDemo {
10 
11     public static void main(String[] args) throws ParseException {
12 
13         //  準備輸出的格式,如:星期四 2009/01/01
14         SimpleDateFormat sdf = new SimpleDateFormat("E yyyy/MM/dd");
15 
16         //  利用 DateFormat 來parse 日期的字串
17         DateFormat df = DateFormat.getDateInstance();
18         Date date = df.parse("2009/1/1");
19         Calendar calendar = Calendar.getInstance();
20         calendar.setTime(date);
21         System.out.println(sdf.format(calendar.getTime()));
22 
23         //  利用 set 直接輸入日期
24         calendar.set(2009, Calendar.JANUARY, 1);
25         System.out.println(sdf.format(calendar.getTime()));
26         
27         //  直接格式化輸出現在時間的方法
28         SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd 
29                                     HH:mm:ss.SSS");
30         Date current = new Date();
31         System.out.println(sdFormat.format(current));
32     }
33 }
輸出結果為:
星期四 2009/01/01
2011/11/24 22:38:54.631

而 SimpleDateFormat可以讓我們選擇日期輸出的格式可以參考以下的表格:
Date and Time Pattern Result
"yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy" Wed, Jul 4, '01
"h:mm a" 12:08 PM
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
"K:mm a, z" 0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ" 010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ" 2001-07-04T12:08:56.235-0700
(來源為:http://java.sun.com/javase/6/docs/api/java/text/SimpleDateFormat.html)

另外更多關於日期時間的處理可以看這兩篇:
1. java日期加减法 (也有繁體中文版本)
2. 藍色小鋪的討論串

關鍵字:Date, Calendar, DateFormat, SimpleDateFormat, parse, Java, 時間, 處理, 格式, 轉換,
參考資料:
1. Java Api:SimpleDateFormat
2. java日期加减法繁體中文版本
3. 藍色小鋪的討論串


更多精選推薦文章