java日期如何转换
日期转换方法
在Java中,日期转换通常涉及java.util.Date、java.util.Calendar、java.time包(Java 8及以上版本)以及字符串之间的相互转换。以下是常见的转换场景和实现方式:
字符串转Date(旧API)
使用SimpleDateFormat类将字符串解析为Date对象:
String dateString = "2023-10-25";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(dateString);
Date转字符串(旧API)
使用SimpleDateFormat格式化Date对象:
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = sdf.format(date);
新旧API转换(Date与LocalDateTime)
通过Instant实现java.util.Date与java.time.LocalDateTime的互转:
// Date转LocalDateTime
Date oldDate = new Date();
LocalDateTime ldt = oldDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
// LocalDateTime转Date
LocalDateTime now = LocalDateTime.now();
Date newDate = Date.from(now.atZone(ZoneId.systemDefault()).toInstant());
字符串转LocalDate(新API)
使用DateTimeFormatter解析字符串为LocalDate:
String dateStr = "2023-10-25";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.parse(dateStr, formatter);
LocalDate转字符串(新API)
格式化LocalDate为指定格式字符串:
LocalDate date = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String result = date.format(formatter);
时间戳与日期转换
将时间戳(毫秒)转换为LocalDateTime:

long timestamp = System.currentTimeMillis();
LocalDateTime dateTime = Instant.ofEpochMilli(timestamp)
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
注意事项
- 时区处理:明确指定时区(如
ZoneId.of("Asia/Shanghai"))避免时区问题。 - 线程安全:
SimpleDateFormat非线程安全,建议每个线程单独创建实例或使用ThreadLocal。 - 新API优先:Java 8及以上版本推荐使用
java.time包(如LocalDate、ZonedDateTime),API设计更清晰且不可变。






