留一点专注,给这篇手记。
Java 时间类型与数据库字段映射
从 LocalDate 到 ZonedDateTime:梳理 Java 8 时间类型的精度、用途与数据库字段的对应关系,附端口占用排查。
这篇文章的目录⌄
学习 Java 时整理的常用知识点:时间类型怎么选、数据库字段怎么对应,以及开发中常用的端口排查命令。
时间类型
Java 8 引入的 java.time 包提供了一套不可变、线程安全的时间类型,按精度和用途区分。
1. java.time.LocalDate
- 描述:
LocalDate表示不带时间的日期(年、月、日)。它是不可变的且线程安全的。 - 精度: 天
- 数据库关联: 与数据库中的
DATE类型对应。
java.time.LocalDate localDate = java.time.LocalDate.now();
2. java.time.LocalTime
- 描述:
LocalTime表示不带日期的时间(时、分、秒、纳秒)。它也是不可变的且线程安全的。 - 精度: 纳秒级
- 数据库关联: 与数据库中的
TIME类型对应。
java.time.LocalTime localTime = java.time.LocalTime.now();
3. java.time.LocalDateTime
- 描述:
LocalDateTime是LocalDate和LocalTime的组合,表示不带时区的日期和时间。它是不可变的且线程安全的。 - 精度: 纳秒级
- 数据库关联: 与数据库中的
TIMESTAMP或DATETIME类型对应。
java.time.LocalDateTime localDateTime = java.time.LocalDateTime.now();
4. java.time.Instant
- 描述:
Instant表示时间线上的一个瞬时点,通常用于记录事件的时间戳。它是以 UTC 时间为基准的。 - 精度: 纳秒级
- 数据库关联: 通常与数据库中的
TIMESTAMP类型对应,但需要转换为LocalDateTime或ZonedDateTime进行存储。
java.time.Instant instant = java.time.Instant.now();
5. java.time.ZonedDateTime
- 描述:
ZonedDateTime表示带时区的日期和时间。它是LocalDateTime和ZoneId的组合。 - 精度: 纳秒级
- 数据库关联: 通常与数据库中的
TIMESTAMP WITH TIME ZONE类型对应。
java.time.ZonedDateTime zonedDateTime = java.time.ZonedDateTime.now();
6. java.time.OffsetDateTime
- 描述:
OffsetDateTime表示带偏移量的日期和时间,通常用于表示与 UTC 时间的偏移。 - 精度: 纳秒级
- 数据库关联: 通常与数据库中的
TIMESTAMP WITH TIME ZONE类型对应。
java.time.OffsetDateTime offsetDateTime = java.time.OffsetDateTime.now();
7. java.time.Duration
- 描述:
Duration表示两个时间点之间的时间量,通常用于表示秒和纳秒的时间间隔。 - 精度: 纳秒级
- 数据库关联: 通常不直接映射到数据库字段,但可以存储为
BIGINT(表示秒或毫秒)。
java.time.Duration duration = java.time.Duration.ofSeconds(60);
8. java.time.Period
- 描述:
Period表示两个日期之间的时间量,通常用于表示年、月、日的间隔。 - 精度: 天
- 数据库关联: 通常不直接映射到数据库字段,但可以存储为
VARCHAR或INT。
java.time.Period period = java.time.Period.ofDays(10);
数据库字段类型与 Java 类型的对应关系
| 数据库类型 | Java类型 |
|---|---|
DATE | LocalDate |
TIME | LocalTime |
TIMESTAMP | LocalDateTime |
TIMESTAMP WITH TIME ZONE | ZonedDateTime, OffsetDateTime |
DATETIME | LocalDateTime, java.util.Date |
BIGINT (存储时间戳) | Instant, Long |
附:查看端口号是否被占用
开发中经常遇到端口被占用的情况,可以用下面的命令排查:
-
打开
cmd命令行。 -
输入以下命令:
netstat -ano | findstr :8090netstat -ano:显示所有活动的网络连接和监听端口,并显示进程 ID (PID)。findstr :8090:过滤出包含8090端口的信息。
-
如果
8090端口被占用,你会看到类似以下的输出:TCP 0.0.0.0:8090 0.0.0.0:0 LISTENING 1234 TCP [::]:8090 [::]:0 LISTENING 1234- 其中
1234是占用该端口的进程 ID (PID)。 - 若没有被占用则什么都不显示。
- 其中
-
如果你想查看是哪个程序占用了该端口,可以通过 PID 查找进程名称。运行以下命令:
tasklist | findstr 1234- 将
1234替换为实际的 PID。 - 输出会显示占用该端口的进程名称。
- 将