Timestamp是Java中少數遺留日期時間對象之一。bash
本文咱們將討論如何進行 Timestamp和String的互轉ui
因爲Timestamp依賴於Java專有格式,咱們能夠看看,在Java8中,如何更高效、快捷的轉換。spa
解析一個最簡單的方法,能夠用Timestamp的valueOf
方法,就能夠知足:code
Timestamp.valueOf("2018-11-12 01:02:03.123456789")
複製代碼
當咱們的String採用JDBC時間戳格式時- yyyy-m [m] -d [d] hh:mm:ss [.f ...] -
,它會相對簡單一些。orm
具體的格式請看下面表格cdn
格式 | 描述 | 示例 |
---|---|---|
yyyy | 表示年份,而且必須有四位數字 | 2019 |
m[m] | 表示月份,必須有一個或兩個數字(從1到12) | 1,11 |
d[d] | 表示天數,必須有一個或兩個數字(從1到31) | 1,31 |
hh | 表明一天中的小時,容許的值從0到23 | 0,23 |
mm | 分鐘,容許的值從0到59 | 0,59 |
ss | 秒,容許的值從0到59 | 0,59 |
[.f…] | 小數秒(毫微秒)精度,所以容許的值爲0到999999999 | 123456789 |
如今,若是它不是JDBC時間戳格式,該如何解決, 幸運的是, valueOf
也能夠接收參數爲 LocalDateTime
的實例。對象
**這意味着咱們能夠採用任何格式的日期,**咱們只須要先將String轉換爲LocalDateTime 就能夠了:blog
String pattern = "MMM dd, yyyy HH:mm:ss.SSSSSSSS";
String timestampAsString = "Apr 09, 2019 13:02:56.12345678";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
LocalDateTime localDateTime = LocalDateTime.from(formatter.parse(timestampAsString));
複製代碼
而後咱們能夠使用valueOf
:string
Timestamp timestamp = Timestamp.valueOf(localDateTime);
assertEquals("2019-04-09 13:02:56.12345678", timestamp.toString());
複製代碼
請注意, 與Date對象不一樣,Timestamp對象可以存儲毫微秒。it