如何使用 Java 的 LocalDateTime 解析和格式化日期和时间?
在 Java 中,LocalDateTime 是 java.time 包的一部分,用于表示不含时区的日期和时间。它提供了丰富的方法来解析和格式化日期和时间。
以下是使用 LocalDateTime 进行解析和格式化的常见步骤:
将 LocalDateTime 转换为字符串格式,可以使用 DateTimeFormatter。
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
// 创建当前时间的 LocalDateTime
LocalDateTime now = LocalDateTime.now();
// 定义格式化模式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 格式化 LocalDateTime
String formattedDateTime = now.format(formatter);
// 输出格式化后的日期时间
System.out.println("Formatted DateTime: " + formattedDateTime);
}
}
Formatted DateTime: 2024-12-29 14:45:30
将字符串解析为 LocalDateTime,也需要使用 DateTimeFormatter。
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
// 定义日期时间字符串
String dateTimeString = "2024-12-29 14:45:30";
// 定义解析模式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 解析字符串为 LocalDateTime
LocalDateTime dateTime = LocalDateTime.parse(dateTimeString, formatter);
// 输出解析后的 LocalDateTime
System.out.println("Parsed LocalDateTime: " + dateTime);
}
}
Parsed LocalDateTime: 2024-12-29T14:45:30
Java 提供了一些常用的预定义格式化器,例如:
DateTimeFormatter.ISO_LOCAL_DATE_TIME:标准的 ISO-8601 格式。DateTimeFormatter.ISO_DATE_TIME:包含时区的 ISO-8601 格式。
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
// 创建当前时间的 LocalDateTime
LocalDateTime now = LocalDateTime.now();
// 使用预定义格式化器
String isoDateTime = now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
// 输出格式化后的日期时间
System.out.println("ISO Local DateTime: " + isoDateTime);
}
}
ISO Local DateTime: 2024-12-29T14:45:30
在解析字符串时,如果格式不匹配会抛出 DateTimeParseException。
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
public class Main {
public static void main(String[] args) {
String invalidDateTimeString = "2024/12/29 14:45:30";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
try {
LocalDateTime dateTime = LocalDateTime.parse(invalidDateTimeString, formatter);
System.out.println("Parsed DateTime: " + dateTime);
} catch (DateTimeParseException e) {
System.err.println("Invalid date-time format: " + e.getMessage());
}
}
}
Invalid date-time format: Text '2024/12/29 14:45:30' could not be parsed at index 4
DateTimeFormatter 支持自定义格式,以下是常用的模式:
| 符号 | 描述 | 示例 |
|---|---|---|
yyyy |
年 | 2024 |
MM |
月(两位数) | 12 |
dd |
日(两位数) | 29 |
HH |
小时(24小时制) | 14 |
mm |
分钟 | 45 |
ss |
秒 | 30 |
a |
上午/下午 | PM |
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
// 自定义格式化器
DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern("EEEE, MMM dd, yyyy HH:mm:ss a");
// 格式化日期时间
String formattedDateTime = now.format(customFormatter);
// 输出
System.out.println("Custom Formatted DateTime: " + formattedDateTime);
}
}
Custom Formatted DateTime: Sunday, Dec 29, 2024 14:45:30 PM
虽然 LocalDateTime 不包含时区信息,但可以结合 ZonedDateTime 或 OffsetDateTime 处理时区。
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
// 创建 LocalDateTime
LocalDateTime now = LocalDateTime.now();
// 转换为 ZonedDateTime
ZonedDateTime zonedDateTime = now.atZone(ZoneId.of("America/New_York"));
// 输出带时区的日期时间
System.out.println("ZonedDateTime: " + zonedDateTime);
}
}
ZonedDateTime: 2024-12-29T14:45:30-05:00[America/New_York]
DateTimeFormatter 定义格式,将 LocalDateTime 转换为字符串。DateTimeFormatter 将字符串解析为 LocalDateTime。DateTimeFormatter 提供的标准格式。ZonedDateTime 或 OffsetDateTime。通过灵活使用 LocalDateTime 和 DateTimeFormatter,可以轻松解析和格式化日期时间。
2025 年陆剧市场依旧热度爆棚
时间:2025-09-19
阵地央一首播:年度高品质大剧,深度解锁文化抗战三重非凡意义
时间:2025-09-18
陈展鹏刘佩玥《巨塔之后》今首播
时间:2025-08-28
生万物大结局惊现最招恨角色,原来真正的坏都披着善的“羊皮”!
时间:2025-08-28
归队6集燃爆:袁姗姗化身“战地玫瑰”,实战军医双在线超吸睛!
时间:2025-08-28
许凯田曦薇新剧《子夜归》首播,点击率位列第七
时间:2025-08-21