1. 概述
Timestamp是Java中少数几个遗留的日期时间对象之一。
在本教程中,我们将了解如何将字符串值解析为Timestamp对象以及如何将Timestamp对象格式化为字符串。
由于Timestamp依赖于Java专有格式,我们将了解如何有效地适应。
2. 将String解析为Timestamp
2.1 标准格式
将String解析为Timestamp的最简单方法是其valueOf方法:
Timestamp.valueOf("2018-11-12 01:02:03.123456789")
当我们的String采用JDBC时间戳格式yyyy-m[m]-d[d]hh:mm: ss[.f…]时-那么它就非常简单。
我们可以这样解释这个模式:
模式 | 描述 | 例子 |
---|---|---|
yyyy | 代表年份,必须为四位数字 | 2018 |
m[] | 对于月份部分,我们必须有一个或两个数字(从1到12) | 1、11 |
d[d] | 对于月份中的日期值,我们必须有一个或两个数字(从1到31) | 7、12 |
hh | 代表一天中的小时,允许的值从0到23 | 01、16 |
mm | 代表一小时中的分钟数,允许值从0到59 | 02、45 |
sss | 代表一分钟内的秒数,允许值从0到59 | 03、52 |
[.f…] | 表示可选的秒数分数,精度可达纳秒,因此允许的值是从0到999999999 | 12、1567、123456789 |
2.2 替代格式
现在,如果它不是JDBC时间戳格式,那么幸运的是,valueOf也采用LocalDateTime实例。
这意味着我们可以采用任何格式的日期,我们只需要先将其转换为LocalDateTime:
String pattern = "MMM dd, yyyy HH:mm:ss.SSSSSSSS";
String timestampAsString = "Nov 12, 2018 13:02:56.12345678";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
LocalDateTime localDateTime = LocalDateTime.from(formatter.parse(timestampAsString));
然后我们可以使用之前的valueOf:
Timestamp timestamp = Timestamp.valueOf(localDateTime);
assertEquals("2018-11-12 13:02:56.12345678", timestamp.toString());
顺便注意,与Date对象不同,Timestamp对象能够存储秒的几分之一。
3. 将Timestamp格式化为String
要格式化Timestamp,我们将面临同样的挑战,因为它的默认格式是专有的JDBC时间戳格式:
assertEquals("2018-11-12 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);
4. 总结
在本文中,我们了解了如何在Java中在String和Timestamp对象之间进行转换。此外,我们还了解了如何使用LocalDateTime转换作为中间步骤,以便在不同的日期和时间模式之间进行转换。
Show Disqus Comments
Post Directory
扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章
