Java 字符串转 Date
在 Java 中,将字符串转换为 Date 对象是一个常见操作,但需要注意不同 Java 版本之间的差异,以下是几种主要方法:

(图片来源网络,侵删)
使用 SimpleDateFormat (Java 8 之前)
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringToDate {
public static void main(String[] args) {
String dateString = "2025-05-15 14:30:00";
// 定义日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
// 解析字符串为Date对象
Date date = sdf.parse(dateString);
System.out.println("转换后的Date对象: " + date);
// 也可以反向转换
String formattedDate = sdf.format(date);
System.out.println("格式化后的字符串: " + formattedDate);
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用 Java 8 的 DateTimeFormatter (推荐)
Java 8 引入了新的日期时间 API,更推荐使用这些类:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class StringToDateJava8 {
public static void main(String[] args) {
String dateString = "2025-05-15T14:30:00";
// 定义日期格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
try {
// 解析字符串为LocalDateTime对象
LocalDateTime dateTime = LocalDateTime.parse(dateString, formatter);
System.out.println("转换后的LocalDateTime: " + dateTime);
// 也可以反向转换
String formattedDate = dateTime.format(formatter);
System.out.println("格式化后的字符串: " + formattedDate);
} catch (Exception e) {
e.printStackTrace();
}
}
}
其他常见格式示例
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class OtherFormats {
public static void main(String[] args) {
// 日期格式 (yyyy-MM-dd)
String dateStr = "2025-05-15";
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(dateStr, dateFormatter);
System.out.println("LocalDate: " + date);
// 时间格式 (HH:mm:ss)
String timeStr = "14:30:00";
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
// 注意:LocalTime需要java.time包中的LocalTime类
// LocalTime time = LocalTime.parse(timeStr, timeFormatter);
// System.out.println("LocalTime: " + time);
}
}
注意事项
- 线程安全:
SimpleDateFormat不是线程安全的,在多线程环境中使用时需要同步或每次创建新实例 - 时区处理:如果涉及时区,需要明确指定时区
- 格式匹配:字符串格式必须与指定的格式完全匹配
- Java 8+:新项目推荐使用 Java 8 的日期时间 API (
java.time包) - 异常处理:解析可能抛出
DateTimeParseException或ParseException,需要处理
完整示例 (带时区处理)
import java.time.ZonedDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
public class TimeZoneExample {
public static void main(String[] args) {
String dateString = "2025-05-15T14:30:00+08:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX");
try {
ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateString, formatter);
System.out.println("带时区的日期时间: " + zonedDateTime);
// 转换为其他时区
ZonedDateTime utcTime = zonedDateTime.withZoneSameInstant(ZoneId.of("UTC"));
System.out.println("UTC时间: " + utcTime);
} catch (Exception e) {
e.printStackTrace();
}
}
}
选择哪种方法取决于你的 Java 版本和具体需求,对于新项目,强烈建议使用 Java 8 的日期时间 API。

(图片来源网络,侵删)
