一、日期区别
1.pom 依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!--<version>8.0.22</version>-->
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
2.表结构
CREATE TABLE `tbl` (
`date_1` date,
`time_1` time,
`datetime_1` datetime,
`timestamp_1` timestamp
);
3.日期区别
- java.util.Date 可表示 可表示 year-month-date hour:minute:sec
- java.sql.Date 可表示 year-month-date
- java.sql.Timestamp 可表示 year-month-date hour:minute:sec.nano
@Test
public void testDate() {
// month 0 to 11. day 1 to 31.
// 可表示 year-month-date hour:minute:sec
java.util.Date date1 = new java.util.Date(2024, 7, 12, 0 , 0, 0);
// month 0 to 11. day 1 to 31.
// 可表示 year-month-date
java.sql.Date date2 = new java.sql.Date(2024, 7, 12);
// 可表示 hour:minute:second
java.sql.Time time2 = new java.sql.Time(0, 0, 0);
// nano 0 to 999,999,999
// 可表示 year-month-date hour:minute:sec.nano
java.sql.Timestamp timestamp2 = new Timestamp(2024, 7, 12, 0 , 0, 0, 0);
System.out.println(date1.getTime()); // 61681536000000
System.out.println(date1.getMonth()); // 7
System.out.println(date1); // Tue Aug 12 00:00:00 CST 3924
System.out.println(date2.getTime()); // 61681536000000
System.out.println(date2.getMonth()); // 7
System.out.println(date2); // 3924-08-12
}
@Test
public void testJSR310() {
// month 1 to 12. day 1 to 31.
java.time.LocalDate localDate = java.time.LocalDate.of(2024, 8, 12);
// nanoOfSecond 0 to 999,999,999
java.time.LocalTime localTime = java.time.LocalTime.of(0, 0, 0, 0);
java.time.LocalDateTime localDateTime = java.time.LocalDateTime.of(2024, 8, 12,
0, 0, 0, 0);
java.time.ZoneId zoneId = ZoneId.systemDefault();
// 解析一个符合 ISO 8601 标准的字符串表示的时间戳,注意这里的 Z 表示 UTC 时间
// 它是1970-01-01 以来的偏移量,它包含秒和纳秒,携带时区
java.time.Instant instant = java.time.Instant.parse("2024-08-12T00:00:00.000Z");
// 携带时区
java.time.ZonedDateTime zonedDateTime = ZonedDateTime.of(2024, 8, 12,
0, 0, 0, 0, zoneId);
System.out.println(localDate); // 2024-08-12
System.out.println(localTime); // 00:00
System.out.println(localDateTime); // 2024-08-12T00:00
System.out.println(zoneId); // Asia/Shanghai
System.out.println(instant); // 2024-08-12T00:00:00Z
System.out.println(zonedDateTime); // 2024-08-12T00:00+08:00[Asia/Shanghai]
}
@Test
public void testMySQL() throws Exception {
String url = "jdbc:mysql://172.17.0.2:3306/temp";
String user = "root";
String password = "123456";
Connection connection = DriverManager.getConnection(url, user, password);
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery("SELECT * FROM tbl");
while (rs.next()) {
// date java.sql.Date 类型
Object obj1 = rs.getObject(1);
LocalDate r1 = rs.getObject(1, LocalDate.class);
// time java.sql.Time 类型
Object obj2 = rs.getObject(2);
LocalTime r2 = rs.getObject(2, LocalTime.class);
// datetime 8.0.22 是 java.sql.Timestamp 类型 8.0.33 是 java.time.LocalDateTime 类型
Object obj3 = rs.getObject(3);
LocalDateTime r3 = rs.getObject(3, LocalDateTime.class);
// timestamp java.sql.Timestamp 类型
Object obj4 = rs.getObject(4);
LocalDateTime r4 = rs.getObject(4, LocalDateTime.class);
}
connection.close();
}
二、ISO 8601
1.ISO 8601 的基本格式
ISO 8601 规定了一种标准的日期和时间表示方式,以确保在全球范围内的一致性
- 日期格式:YYYY-MM-DD
- 时间格式:hh:mm:ss
- 日期和时间结合:YYYY-MM-DDThh:mm:ss
例如,2024年1月11日上午10点30分15秒的表示为:2024-01-11T10:30:15
2.时区表示
- 协调世界时(UTC):使用字母’Z’表示,例如:2024-01-11T10:30:15Z
- 时区偏移:使用+/-hh:mm的形式表示相对于UTC的偏移,例如:2024-01-11T10:30:15+03:00 表示相对于UTC的3小时偏移