啥是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 【当前时区】