Java 中怎么实现 Timestamp 和 String 互转

 2022-09-27

简介

202209272207077931.png

Timestamp是Java中少数遗留日期时间对象之一。

本文我们将讨论如何进行 Timestamp和String的互转

由于Timestamp依赖于Java专有格式,我们可以看看,在Java8中,如何更高效、快捷的转换。

String 转 Timestamp

标准格式

解析一个最简单的方法,可以用Timestamp的valueOf 方法,就可以满足:

    Timestamp.valueOf("2018-11-12 01:02:03.123456789")

当我们的String采用JDBC时间戳格式时- yyyy-m [m] -d [d] hh:mm:ss [.f ...] -,它会相对简单一些。

具体的格式请看下面表格

格式描述示例

202209272207088902.png

其他格式

现在,如果它不是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对象能够存储毫微秒。

Timestamp 转 String

要格式化时间戳,我们将面临同样的挑战,因为它的默认格式是专有的JDBC时间戳格式:

    assertEquals("2019-04-09 13:02:56.12345678", timestamp.toString());

但是,再次使用中间转换,我们可以将生成的String格式化为不同的日期和时间模式,如ISO-8601标准:

    Timestamp timestamp = Timestamp.valueOf("2018-12-12 01:02:03.123456789");
    DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
     
    String timestampAsString = formatter.format(timestamp.toLocalDateTime());
    assertEquals("2018-12-12T01:02:03.123456789", timestampAsString);

结论

Java中转换StringTimestamp对象,在Java8中有更加方便快捷的API。