本篇文章涵蓋多種字符串日期時間格式化以及日期時間解析,包括java8中的日期時間解析與格式化
下圖闡述了什么是時間格式化,什么是時間解析
如上圖所示 Date---->String 稱之為格式化(format), String --->Date 稱之為解析(parse), 目標類型是字符串叫格式化,目標類型是日期對象叫解析,讀者注意上圖箭頭的方向,上圖節選自 <<java瘋狂講義>>
1,SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
是的,別問,論日期格式化解析,問就是SimpleDateFormat,日常寫代碼萬年不變的就是它,嗯,用的最多的也是它,見過別人的代碼里最多的也是它;
//時間格式化
1 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 2 String dateStr = sdf.format(new Date()); 3 System.out.println(dateStr);//打印 2019-10-20 14:14:40
上面代碼先是創建SimpleDateFormat對象,然后在該類的構造方法中寫了一個pattern(日期時間模板).然后調用該對象的format方法傳入Date對象,記得樓主剛學java的時候,甚至還背過這個模板,什么大妹妹,小弟弟之類的,然后還是寫錯了....
能不能不寫這個時間模板呢,用屁股也能想到當然是可以的呢!
//時間格式化
1 Date date = new Date(); 2 String dateStr = String.format("%TF %TT", date,date); 3 System.out.println(dateStr);// 輸出 2019-10-20 14:21:03
你會發現上述代碼一毛一樣,這是String類的format方法提供的時間格式化,format方法的參數1:格式化模板,參數2:是一個可變參數
參數2的多少取決於你想格式化成什么樣子,比如說 yyyy-MM-dd HH:mm:ss 這種是由日期和時間兩部分組成,因此可變參數是兩個,前面的格式字符串也是兩個
格式字符串中的字面代表的含義在java API中有,在 java.util.Formatter 這個類下有詳細說明以及實例
't', 'T' 日期/時間 日期和時間轉換字符的前綴 'F' ISO 8601 格式的完整日期 'T' 24 小時制的時間
樓主的同事,同學曾經坦言,開發多年居然沒看多API文檔,雖然 JDK API 1.6中文版已經很老了 里面歪果仁翻譯的也不是人話 但它畢竟最權威,里面的實例比網上復制的更加令人信服
2,DateFormat
//時間格式化
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM);//參數1代表日期,參數2代表時間 String dateStr = df.format(new Date()); System.out.println(dateStr); //輸出 2019-10-20 14:44:19
如果你覺得 DateFormat.MEDIUM 太長的話,可以考慮靜態導入 import static java.text.DateFormat 是的,IDE工具已經為你做了太多,可能你都忘了靜態導入是干嘛的了
靜態導入后是這樣的了 DateFormat df = DateFormat.getDateTimeInstance(MEDIUM,MEDIUM);
//時間解析
String str = "2019-01-01 12:00:00"; Date date = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM).parse(str); System.out.println(date); //輸出 Tue Jan 01 12:00:00 CST 2019
嗯,是的,樓主已經不想寫yyyy-MM-dd HH:mm:ss 了
3,DateTimeFormatter
//時間格式化
String dateStr = DateTimeFormatter.ofPattern("現在是yyyy-MM-dd HH:mm:ss 是今年的第D天").format(LocalDateTime.now());
//只能自定義模板獲取這種格式的了
//String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); //反過來調用也可以的呦
System.out.println(dateStr); //輸出 現在是2019-10-20 15:07:58 是今年的第293天
//時間解析
LocalDateTime local = LocalDateTime.parse("2019-01-01 12:00:00",DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); Date date = Date.from( local.atZone( ZoneId.systemDefault()).toInstant());//轉換成Date System.out.println(date); //輸出 Tue Jan 01 12:00:00 CST 2019