這是個非常實用的類,可以實現String->Date(parse方法),或者Date->String(format方法)的功能,更細節(jié)的功能請看文章.
java.text
Class SimpleDateFormat
java.lang.Object
java.text.Format
java.text.DateFormat
java.text.SimpleDateFormat
All Implemented Interfaces:
Serializable, Cloneable
public class SimpleDateFormat
extends DateFormat
另外該類用到的模板屬性格式如下:
G 年代標志符
y 年
M 月
d 日
h 時 (12小時制)
H 時 (24小時制)
m 分
s 秒
S 毫秒
E 星期幾
D 一年中的第幾天
F 一月中第幾個星期(以每個月1號為第一周,8號為第二周為標準計算)
w 一年中第幾個星期
W 一月中第幾個星期(不同于F的計算標準,是以星期為標準計算星期數,例如1號是星期三,是當月的第一周,那么5號為星期日就已經是當月的第二周了)
a 上午 / 下午 標記符
k 時 (24小時制,其值與H的不同點在于,當數值小于10時,前面不會有0)
K 時 (12小時值,其值與h的不同點在于,當數值小于10時,前面不會有0)
z 時區(qū)
最簡單的事例:
Date->String
SimpleDateFormat timeFormat
= new SimpleDateFormat("今天是yyyy年MM月dd號 E a hh:mm:ss");
System.out.println(timeFormat.format(new Date()));
今天是2017年03月21號 星期二 上午 11:12:57
還可以由String->Date顯示:
SimpleDateFormat timeFormat
= new SimpleDateFormat("yyyy-MM-dd");
System.out.println(timeFormat.parse("2017-3-21"));
Tue Mar 21 00:00:00 CST 2017
SimpleDateFormat的線程不安全
jdk文檔對于此類有一句這樣的說明:
SimpleDateFormat中的日期格式不是同步的琼懊。推薦(建議)為每個線程創(chuàng)建獨立的格式實例。如果多個線程同時訪問一個格式,則它必須保持外部同步。
每個線程都創(chuàng)建一個SimpleDateFormat的實例,這樣勢必會有很大的系統(tǒng)開銷,要不就同步代碼,要不就使用jdk8的java.time包中的LocalDateTime類,此類線程安全,事實上jdk增加了很多時間處理類而且更加方便,我以后會整理LocalDateTime等類的使用.
結論:
如果你所做的項目當中對于時間處理的使用并不是很多的話,每個方法里面new 一個simpleDateFormat也沒有多大關系,對于一般簡單的時間處理,使用Calendar和SimpleDateFormat就可以解決,但是如果要代碼更加簡潔,線程安全的話,推薦還是使用jdk8當中增加的java.time包(用于日期、時間、實例和周期的主要API,據說是和Joda-Time的作者一起開發(fā)的,值得一試!)的類,或者使用Joda-Time這個工具包,可以把Date,SimpleDateFormat,Calendar替換掉,使用起來更加清晰明了.