DateFormat格式化日期
- getDateInstance:返回一個日期格式器,它格式化的字符串只有日期,沒有時間。該方法可以傳入多個參數,用於指定日期樣式和Locale等參數。如果不指定這些參數,則使用默認參數。
- getTimeInstance:返回一個時間格式器,它格式化的字符串只有時間,沒有日期。該方法可以傳入多個參數,用於指定時間樣式和Locale等參數。如果不指定這些參數,則使用默認參數。
- getDateTimeInstance:返回一個日期、時間格式器,它格式化的字符串既有日期,又有時間。該方法可以傳入多個參數,用於指定日期樣式、時間樣式和Locale等參數。如果不指定這些參數,則使用默認參數。
簡單的DateFormat格式化編碼
時間模式字符串用來指定時間格式。在此模式中,所有的ASCII字母被保留爲模式字母,定義如下:
字母 |
描述 |
示例 |
G |
紀元標記 |
AD |
y |
四位年份 |
2019 |
M |
月份 |
July or 07 |
d |
一個月的日期 |
10 |
h |
A.M./P.M. (1~12)格式小時 |
12 |
H |
一天中的小時 (0~23) |
22 |
m |
分鐘數 |
30 |
s |
秒數 |
55 |
S |
微妙數 |
234 |
E |
星期幾 |
Tuesday |
D |
一年中的日子 |
360 |
F |
一個月中第幾周的周幾 |
2 (second Wed. in July) |
w |
一年中第幾周 |
40 |
W |
一個月中第幾周 |
1 |
a |
A.M./P.M. 標記 |
PM |
k |
一天中的小時(1~24) |
24 |
K |
A.M./P.M. (0~11)格式小時 |
10 |
z |
時區 |
Eastern Standard Time |
' |
文字定界符 |
Delimiter |
" |
單引號 |
` |
SimpleDateFormat格式化日期
SimpleDateFormat是DateFormat的子類,它可以非常靈活地格式化Date,也可用於解析各種格式的日期字符串。創建SimpleDateFormat對象時需要傳入一個pattern字符串,這個pattern不是正則表達式,而是一個日期模板字符串。
import java.util.*;
import java.text.*;
public class DateFormatDemo{
public static void main(String args[]) {
// 初始化 Date 對象
Date date = new Date();
SimpleDateFormat ft = new SimpleDateFormat("E yyyy-MM-dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(date));
}
}
以上實例編譯運行結果如下:
Current Date: 星期五 2019-11-22 at 09:28:10 下午 CST
使用printf格式化日期
printf方法可以很輕鬆地格式化時間和日期。使用兩個字母格式,它以t開頭並且以下面表格中的一個字母結尾。例如:
public class DateFormatDemo{
public static void main(String args[]) {
// 初始化 Date 對象
Date date = new Date();
String str = String.format("Current Date/Time : %tc", date );
System.out.printf(str);
}
以上實例編譯運行結果如下:
Current Date/Time : 星期五 十一月 22 21:40:38 CST 2019
如果你需要重複提供日期,那麼利用這種方式來格式化它的每一部分就有點複雜了。因此,可以利用一個格式化字符串指出要被格式化的參數的索引。
索引必須緊跟在%後面,而且必須以$結束。例如:
public class DateFormatDemo{
public static void main(String args[]) {
// 初始化 Date 對象
Date date = new Date();
System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
}
}
以上實例編譯運行結果如下:
Due date: 十一月 22, 2019
或者,你可以使用<標誌。它表明先前被格式化的參數要被再次使用。例如:
public class DateFormatDemo{
public static void main(String args[]) {
// 初始化 Date 對象
Date date = new Date();
// 顯示格式化時間
System.out.printf("%s %tB %<te, %<tY", "Due date:", date);
}
}
以上實例編譯運行結果如下:
Due date: 十一月 22, 2019
日期和時間轉換字符
字符 |
描述 |
例子 |
c |
完整的日期和時間 |
Mon May 04 09:51:52 CDT 2009 |
F |
ISO 8601 格式日期 |
2004-02-09 |
D |
U.S. 格式日期 (月/日/年) |
02/09/2004 |
T |
24小時時間 |
18:05:19 |
r |
12小時時間 |
06:05:19 pm |
R |
24小時時間,不包含秒 |
18:05 |
Y |
4位年份(包含前導0) |
2004 |
y |
年份後2位(包含前導0) |
04 |
C |
年份前2位(包含前導0) |
20 |
B |
月份全稱 |
February |
b |
月份簡稱 |
Feb |
n |
2位月份(包含前導0) |
02 |
d |
2位日子(包含前導0) |
03 |
e |
2位日子(不包含前導0) |
9 |
A |
星期全稱 |
Monday |
a |
星期簡稱 |
Mon |
j |
3位年份(包含前導0) |
069 |
H |
2位小時(包含前導0), 00 到 23 |
18 |
k |
2位小時(不包含前導0), 0 到 23 |
18 |
I |
2位小時(包含前導0), 01 到 12 |
06 |
l |
2位小時(不包含前導0), 1 到 12 |
6 |
M |
2位分鐘(包含前導0) |
05 |
S |
2位秒數(包含前導0) |
19 |
L |
3位毫秒(包含前導0) |
047 |
N |
9位納秒(包含前導0) |
047000000 |
P |
大寫上下午標誌 |
PM |
p |
小寫上下午標誌 |
pm |
z |
從GMT的RFC 822數字偏移 |
-0800 |
Z |
時區 |
PST |
s |
自 1970-01-01 00:00:00 GMT的秒數 |
1078884319 |
Q |
自 1970-01-01 00:00:00 GMT的毫妙 |
1078884319047 |
還有其他有用的日期和時間相關的類。對於更多的細節,你可以參考到Java標準文檔。
解析字符串爲時間
SimpleDateFormat 類有一些附加的方法,特別是parse(),它試圖按照給定的SimpleDateFormat 對象的格式化存儲來解析字符串。例如:
public class DateFormatDemo{
public static void main(String args[]) {
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");
String input ="2019-11-23";
Date t;
try {
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("Unparseable using " + ft);
}
}
}
以上實例編譯運行結果如下:
Sat Nov 23 00:00:00 CST 2019
小弟才疏學淺,如有不當之處,還請多多指教
參考: