Java 中 String 转 DateTime
在 Java 中,将 String 转换为日期时间(DateTime)通常需要使用 java.time 包中的类(Java 8 及以上版本)或 java.text.SimpleDateFormat(旧版 Java),以下是几种常见的方法:
使用 Java 8 的 java.time API(推荐)
使用 DateTimeFormatter 和 LocalDateTime
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class StringToDateTime {
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: " + dateTime);
}
}
使用 ZonedDateTime 处理时区
import java.time.ZonedDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
public class StringToDateTime {
public static void main(String[] args) {
String dateTimeString = "2025-05-15T14:30:00+08:00";
ZonedDateTime dateTime = ZonedDateTime.parse(dateTimeString);
System.out.println("转换后的ZonedDateTime: " + dateTime);
}
}
使用 java.text.SimpleDateFormat(旧版 Java)
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringToDateTime {
public static void main(String[] args) {
String dateString = "2025-05-15";
String dateTimeString = "2025-05-15 14:30:00";
// 转换为Date
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date = dateFormat.parse(dateString);
Date dateTime = dateTimeFormat.parse(dateTimeString);
System.out.println("转换后的Date(日期): " + date);
System.out.println("转换后的Date(日期时间): " + dateTime);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
常见日期格式模式
| 符号 | 含义 | 示例 |
|---|---|---|
| yyyy | 年 | 2025 |
| MM | 月 | 05 |
| dd | 日 | 15 |
| HH | 时(24小时制) | 14 |
| mm | 分 | 30 |
| ss | 秒 | 00 |
| a | 上午/下午标记 | PM |
| z | 时区 | CST |
处理不同格式的字符串
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
public class StringToDateTime {
public static void main(String[] args) {
String[] dateFormats = {
"2025/05/15",
"15-05-2025",
"May 15, 2025",
"20250515",
"2025-05-15 14:30"
};
DateTimeFormatter[] formatters = {
DateTimeFormatter.ofPattern("yyyy/MM/dd"),
DateTimeFormatter.ofPattern("dd-MM-yyyy"),
DateTimeFormatter.ofPattern("MMMM d, yyyy"),
DateTimeFormatter.ofPattern("yyyyMMdd"),
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")
};
for (int i = 0; i < dateFormats.length; i++) {
try {
LocalDateTime dateTime = LocalDateTime.parse(dateFormats[i], formatters[i]);
System.out.println("成功解析: " + dateFormats[i] + " -> " + dateTime);
} catch (DateTimeParseException e) {
System.out.println("无法解析: " + dateFormats[i]);
}
}
}
}
注意事项
-
线程安全:
SimpleDateFormat不是线程安全的,在多线程环境中应每次创建新实例或使用ThreadLocal。DateTimeFormatter是线程安全的。 -
异常处理:解析时可能抛出
DateTimeParseException或ParseException,需要妥善处理。 -
时区问题:处理跨时区数据时要注意时区转换。
-
格式匹配:确保字符串格式与指定的格式模式完全匹配。
-
Java 版本:新项目建议使用 Java 8+ 的
java.timeAPI,它更现代且功能更强大。



