如何构造一个 Timestamp()

2024-07-31 08:03:00 浏览数 (2)

啥是Timestamp?

java.sql.Timestamp 类是 Java 中用于精确表示日期和时间的数据类型,特别适用于在与数据库交互时处理时间戳信息。


为何引入Timestamp?

1. 数据库交互的标准化

数据库系统为Java应用程序提供一种与数据库中时间戳字段直接对应的数据类型。

2. 增强的时间精度

早期的 java.util.Date 类仅精确到毫秒级,Timestamp 类扩展到纳秒级。

3. 特定数据库功能支持

例如,它可以携带时区信息。


Java里如何构造Timestamp

构造方法 →【时间戳 的 当前时区时间格式】

代码语言:java复制
new Timestamp(1562501898000L));                      //2019-07-07 20:18:18.0 【当前时区】

根据Date获取Timestamp

代码语言:java复制
new Timestamp(new Date(1562501898000L).getTime()));  //2019-07-07 20:18:18.0 【当前时区】

根据Instant获取Timestamp

代码语言:java复制
Timestamp.from(Instant.ofEpochMilli(1562501898888L)));  //2019-07-07 20:18:18.888       【当前时区】
Timestamp.from(Instant.ofEpochSecond(1562501898)));     //2019-07-07 20:18:18.0         【当前时区】
Timestamp.from(Instant.ofEpochSecond(1562501898,888))); //2019-07-07 20:18:18.000000888 【当前时区】

Timestamp.from(Instant.parse("2019-07-07T20:18:18.000000888Z")));//2019-07-08 04:18:18.000000888  【当前时区】
Timestamp.from(Instant.parse("2019-07-07T20:18:18Z")));//2019-07-08 04:18:18.0  

ZonedDateTime ZONED_DATE_TIME = ZonedDateTime.of(2019, 7, 7, 20, 18, 18, 888, ZoneId.of("Asia/Tokyo"));
OffsetDateTime OFFSET_DATE_TIME = OffsetDateTime.of(2019, 7, 7, 20, 18, 18, 888, ZoneOffset.ofHours(9));
LocalDateTime LOCAL_DATE_TIME = LocalDateTime.of(2019, 7, 7, 20, 18, 18, 888);

Timestamp.from(ZONED_DATE_TIME.toInstant()));                       //2019-07-07 19:18:18.000000888  【当前时区】
Timestamp.from(OFFSET_DATE_TIME.toInstant()));                      //2019-07-07 19:18:18.000000888  【当前时区】
Timestamp.from(LOCAL_DATE_TIME.toInstant(ZoneOffset.ofHours(8))));  //2019-07-07 20:18:18.000000888  【当前时区】
Timestamp.from(LOCAL_DATE_TIME.toInstant(ZoneOffset.UTC)));         //2019-07-08 04:18:18.000000888  【当前时区】  

根据LocalDateTime获取Timestamp 【单纯转换格式,没时区转换】

代码语言:java复制
LocalDateTime LOCAL_DATE_TIME = LocalDateTime.of(2019, 7, 7, 20, 18, 18, 888);
Timestamp.valueOf(LOCAL_DATE_TIME));                    //2019-07-07 20:18:18.000000888                    【当前时区】

ZonedDateTime ZONED_DATE_TIME = ZonedDateTime.of(2019, 7, 7, 20, 18, 18, 888, ZoneId.of("Asia/Tokyo"));
ZONED_DATE_TIME);                                       //2019-07-07T20:18:18.000000888 09:00[Asia/Tokyo]  【当前时区】
ZONED_DATE_TIME.toLocalDateTime());                     //2019-07-07T20:18:18.000000888                    【当前时区】
Timestamp.valueOf(ZONED_DATE_TIME.toLocalDateTime()));  //2019-07-07 20:18:18.000000888                    【当前时区】

0 人点赞