Timestamp是Java中少数遗留日期时间对象之一。
本文我们将讨论如何进行 Timestamp和String的互转
由于Timestamp依赖于Java专有格式,我们可以看看,在Java8中,如何更高效、快捷的转换。
解析一个最简单的方法,可以用Timestamp的 valueOf
方法,就可以满足:
Timestamp.valueOf("2018-11-12 01:02:03.123456789") 复制代码
当我们的String采用JDBC时间戳格式时 - yyyy-m [m] -d [d] hh:mm:ss [.f ...] -
,它会相对简单一些。
具体的格式请看下面表格
格式 | 描述 | 示例 |
---|---|---|
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 就可以了:
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
:
Timestamp timestamp = Timestamp.valueOf(localDateTime); assertEquals("2019-04-09 13:02:56.12345678", timestamp.toString()); 复制代码
请注意, 与Date对象不同,Timestamp对象能够存储毫微秒。