Java 时间和日期
标签
Language
Java
Time
字数
803 字
阅读时间
5 分钟
[!summary] 日期和时间
Date
是 Java 早期的日期类,不推荐直接使用。Calendar
支持更多功能,但自 Java 8 起被LocalDate
、LocalTime
、LocalDateTime
等类取代。LocalDate
、LocalTime
和LocalDateTime
提供了更现代化、线程安全的日期处理方法。DateTimeFormatter
用于格式化和解析日期时间。- 各种日期时间类可以通过
Instant
和时区进行互相转换。- 与 SQL 数据库日期时间交互时,可以使用
java.sql.Date
、java.sql.Time
和java.sql.Timestamp
类。
1 LocalDate
、LocalTime
、LocalDateTime
Java 8 引入了全新的日期和时间 API,推荐使用这些类进行日期和时间操作。LocalDate
表示日期,LocalTime
表示时间,而 LocalDateTime
同时包含日期和时间。
1.1 LocalDateTime
与 Date
之间的转换
虽然不推荐直接使用 Date
,但在某些情况下需要与旧代码兼容。可以通过 Instant
进行转换。
1.1.1 Date
转 LocalDateTime
java
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
public class DateToLocalDateTime {
public static void main(String[] args) {
// Date 转 LocalDateTime
Date date = new Date();
Instant instant = date.toInstant();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
System.out.println("Date: " + date);
System.out.println("LocalDateTime: " + localDateTime);
}
}
1.1.2 LocalDateTime
转 Date
java
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
public class LocalDateTimeToDate {
public static void main(String[] args) {
// LocalDateTime 转 Date
LocalDateTime localDateTime = LocalDateTime.now();
Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
System.out.println("LocalDateTime: " + localDateTime);
System.out.println("Date: " + date);
}
}
1.2 LocalDateTime
与 LocalDate
和 LocalTime
的转换
LocalDateTime
可以很方便地与 LocalDate
和 LocalTime
进行互相转换。
java
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class LocalDateTimeConversion {
public static void main(String[] args) {
// LocalDate 和 LocalTime 转 LocalDateTime
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
System.out.println("LocalDate: " + localDate);
System.out.println("LocalTime: " + localTime);
System.out.println("LocalDateTime: " + localDateTime);
// LocalDateTime 转 LocalDate 和 LocalTime
LocalDate extractedDate = localDateTime.toLocalDate();
LocalTime extractedTime = localDateTime.toLocalTime();
System.out.println("Extracted LocalDate: " + extractedDate);
System.out.println("Extracted LocalTime: " + extractedTime);
}
}
2 DateTimeFormatter
格式化与解析
DateTimeFormatter
提供了格式化和解析日期时间的能力。你可以通过自定义模式来格式化 LocalDateTime
,并解析字符串为日期时间对象。
2.1 格式化 LocalDateTime
为字符串
java
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class LocalDateTimeFormatting {
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 格式化 LocalDateTime 为字符串
String formattedDateTime = localDateTime.format(formatter);
System.out.println("Formatted LocalDateTime: " + formattedDateTime);
}
}
2.2 解析字符串为 LocalDateTime
java
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class StringToLocalDateTime {
public static void main(String[] args) {
String dateTimeString = "2024-09-09 12:30:45";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 解析字符串为 LocalDateTime
LocalDateTime localDateTime = LocalDateTime.parse(dateTimeString, formatter);
System.out.println("Parsed LocalDateTime: " + localDateTime);
}
}
3 Instant
与 Timestamp
Instant
是 Java 8 中用于精确记录时间点的类,适用于存储和处理 UTC 时间。Timestamp
是 Date
的子类,通常用于处理与 SQL 数据库交互中的 DATETIME
和 TIMESTAMP
类型字段。
3.1 Timestamp
转 Instant
java
import java.sql.Timestamp;
import java.time.Instant;
public class TimestampToInstant {
public static void main(String[] args) {
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
Instant instant = timestamp.toInstant();
System.out.println("Timestamp: " + timestamp);
System.out.println("Instant: " + instant);
}
}
3.2 Instant
转 Timestamp
java
import java.sql.Timestamp;
import java.time.Instant;
public class InstantToTimestamp {
public static void main(String[] args) {
Instant instant = Instant.now();
Timestamp timestamp = Timestamp.from(instant);
System.out.println("Instant: " + instant);
System.out.println("Timestamp: " + timestamp);
}
}
4 LocalDateTime
与 Timestamp
的转换
4.1 LocalDateTime
转 Timestamp
java
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.ZoneId;
public class LocalDateTimeToTimestamp {
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
Timestamp timestamp = Timestamp.valueOf(localDateTime);
System.out.println("LocalDateTime: " + localDateTime);
System.out.println("Timestamp: " + timestamp);
}
}
4.2 Timestamp
转 LocalDateTime
java
import java.sql.Timestamp;
import java.time.LocalDateTime;
public class TimestampToLocalDateTime {
public static void main(String[] args) {
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
LocalDateTime localDateTime = timestamp.toLocalDateTime();
System.out.println("Timestamp: " + timestamp);
System.out.println("LocalDateTime: " + localDateTime);
}
}