SimpleDateFormat這個類來解決我們的時間格式問題。
SimpleDateFormat 是一個以與語言環境相關的方式來格式化和分析日期的具體類。它允許進行格式化(日期 -> 文本)、分析(文本 -> 日期)和正常化。SimpleDateFormat 使得可以選擇任何使用者定義的日期-時間格式的模式.
日期和時間模式
日期和時間格式由日期和時間模式 字串指定。在日期和時間模式字串中,未加引號的字母 'A' 到 'Z' 和 'a' 到 'z' 被解釋為模式字母,用來表示日期或時間字串元素。文本可以使用單引號 (') 引起來,以免進行解釋。"''" 表示單引號。所有其他字元均不解釋;只是在格式化時將它們簡單複製到輸出字串,或者在分析時與輸入字串進行匹配。
定義了以下模式字母(所有其他字元 'A' 到 'Z' 和 'a' 到 'z' 都被保留):
| 字母 |
日期或時間元素 |
表示 |
樣本 |
G |
Era 標誌符 |
Text |
AD |
y |
年 |
Year |
1996; 96 |
M |
年中的月份 |
Month |
July; Jul; 07 |
w |
年中的周數 |
Number |
27 |
W |
月份中的周數 |
Number |
2 |
D |
年中的天數 |
Number |
189 |
d |
月份中的天數 |
Number |
10 |
F |
月份中的星期 |
Number |
2 |
E |
星期中的天數 |
Text |
Tuesday; Tue |
a |
Am/pm 標記 |
Text |
PM |
H |
一天中的小時數(0-23) |
Number |
0 |
k |
一天中的小時數(1-24) |
Number |
24 |
K |
am/pm 中的小時數(0-11) |
Number |
0 |
h |
am/pm 中的小時數(1-12) |
Number |
12 |
m |
小時中的分鐘數 |
Number |
30 |
s |
分鐘中的秒數 |
Number |
55 |
S |
毫秒數 |
Number |
978 |
z |
時區 |
General time zone |
Pacific Standard Time; PST; GMT-08:00 |
Z |
時區 |
RFC 822 time zone |
-0800 |
以下樣本顯示了如何在美國語言環境中解釋日期和時間模式。給定的日期和時間為美國太平洋時區的本地時間 2001-07-04 12:08:56
| 日期和時間模式 |
結果 |
"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 |
SimpleDateFormat 在編程中的實際應用執行個體:
(一)格式化(日期 -> 文本)
一般地,中文中常用的 日期 時間如:20070719 20:29:30
SimpleDateFormat formater = new SimpleDateFormat("yyyyMMdd hh:mm:ss");
System.out.println("Date to String "+formater.format(new Date()));
相近的常用形式還有 yyMMdd hh:mm:ss yyyy-MM-dd hh:mm:ss dd-MM-yyyy hh:mm:ss
但是值得注意是:這種格式(19JUL07 )及其相近的形式,就有點小技巧 19JUL07
SimpleDateFormat formater = new SimpleDateFormat("ddMMMyy",,new Locale("US"))
System.out.println("Date to String "+formater.format(new Date()).toUpperCase());
由於是英文的所以應該使用 Locale 對象參數,否則就使用的是預設本地 Locale 。
(二)分析(文本 -> 日期)
一般地,想要什麼要的格式的時間就就使用什麼形式的日期時間模式和文本參數,例如 2007-7-19 則返回一個java.util.Date型的時間對象,時分秒都補0
formater = new SimpleDateFormat("yyyyMMMdd",new Locale("US"));
try ...{
System.out.println("String to Date "+formater.parse("2007sep01"));
} catch (ParseException e) ...{
e.printStackTrace();
}
特別地,
formater = new SimpleDateFormat("yyyyMMMdd",new Locale("US"));
try ...{
System.out.println("String to Date "+formater.parse("2007sep01"));
} catch (ParseException e) ...{
e.printStackTrace();
}
它也返回一個java.util.Date型的日期對象,時分秒都補0
(三)文本 - > Timestamp 、日期 -> Timestamp
Timestamp t ;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try ...{
t = new Timestamp(format.parse("2007-07-19 00:00:00").getTime());
} catch (ParseException e) ...{
e.printStackTrace();
}
Timestamp t ;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
t = new Timestamp(new Date().getTime());