Java 字符串转日期
在 Java 中,将字符串转换为日期对象可以使用 java.time 包中的类(Java 8+)或旧的 java.text.SimpleDateFormat 类,以下是几种常见的方法:

(图片来源网络,侵删)
使用 Java 8 的 java.time 包(推荐)
LocalDate 示例(仅日期)
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class StringToDate {
public static void main(String[] args) {
String dateString = "2025-05-15";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(dateString, formatter);
System.out.println("转换后的日期: " + date);
}
}
LocalDateTime 示例(日期和时间)
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class StringToDate {
public static void main(String[] args) {
String dateTimeString = "2025-05-15 14:30:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.parse(dateTimeString, formatter);
System.out.println("转换后的日期时间: " + dateTime);
}
}
ZonedDateTime 示例(带时区)
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class StringToDate {
public static void main(String[] args) {
String zonedDateTimeString = "2025-05-15T14:30:00+08:00";
DateTimeFormatter formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
ZonedDateTime zonedDateTime = ZonedDateTime.parse(zonedDateTimeString, formatter);
System.out.println("转换后的带时区日期时间: " + zonedDateTime);
}
}
使用旧的 SimpleDateFormat 类(Java 8 之前)
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringToDate {
public static void main(String[] args) {
String dateString = "2025-05-15";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = formatter.parse(dateString);
System.out.println("转换后的日期: " + date);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
处理不同的日期格式
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
public class StringToDate {
public static void main(String[] args) {
String[] dateFormats = {
"yyyy-MM-dd",
"MM/dd/yyyy",
"dd-MM-yyyy",
"yyyyMMdd"
};
String dateString = "15052025"; // 15-May-2025
for (String format : dateFormats) {
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
LocalDate date = LocalDate.parse(dateString, formatter);
System.out.println("格式 '" + format + "' 匹配成功: " + date);
break;
} catch (DateTimeParseException e) {
// 继续尝试下一种格式
}
}
}
}
自定义格式转换
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class StringToDate {
public static void main(String[] args) {
String inputDate = "15-May-2025";
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy");
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
LocalDate date = LocalDate.parse(inputDate, inputFormatter);
String formattedDate = date.format(outputFormatter);
System.out.println("原始日期: " + inputDate);
System.out.println("转换后日期: " + formattedDate);
}
}
注意事项
- 线程安全:
java.time包中的类是线程安全的,而SimpleDateFormat不是 - 异常处理:解析日期时可能会抛出异常,需要适当处理
- 时区问题:处理带时区的日期时要注意时区转换
- 格式匹配:确保字符串格式与指定的格式模式完全匹配
对于新项目,建议使用 Java 8 引入的 java.time 包,它提供了更强大、更易用的日期时间 API。

(图片来源网络,侵删)
