好的,懂了!
我给你总结一版适合中国(北京时间,东八区)使用的
✅ Date
vs LocalDateTime
常用操作对照表。
☀️ Java中 Date vs LocalDateTime(中国时区版对照表)
功能 | Date 写法(简单版) | LocalDateTime 写法(标准版,东八区) | 说明 |
---|---|---|---|
获取当前时间 | new Date() | LocalDateTime.now() | |
获取时间戳(毫秒) | new Date().getTime() | LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli() | LocalDateTime 需要指定时区 |
时间加减天数 | DateUtils.addDays(date, 2) (Apache工具包) | localDateTime.plusDays(2) / minusDays(2) | LocalDateTime内置链式操作 |
时间加减小时 | DateUtils.addHours(date, 3) | localDateTime.plusHours(3) / minusHours(3) | |
时间加减分钟 | DateUtils.addMinutes(date, 10) | localDateTime.plusMinutes(10) / minusMinutes(10) | |
时间格式化成字符串 | new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date) | DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(localDateTime) | LocalDateTime 推荐线程安全写法 |
字符串转时间 | new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(str) | LocalDateTime.parse(str, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) | |
时间戳转时间 | new Date(timestamp) | LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.of("Asia/Shanghai")) | LocalDateTime需要指定上海时区 |
获取某个时间字段(年、月、日等) | Calendar.get(Calendar.YEAR) 等 | localDateTime.getYear() , .getMonthValue() , .getDayOfMonth() | LocalDateTime更优雅 |
🏆 补充:中国常用时区
如果是中国大陆(北京时间),统一使用:
ZoneId.of("Asia/Shanghai")
// 或者
ZoneOffset.of("+8")
两个都可以,效果一样。
ZoneId
更精确,适合各种地区。ZoneOffset
简单暴力,适合只需要时差的情况。
🔥 最常用的几行代码(背下来就行)
// LocalDateTime -> 毫秒时间戳(北京时间)
long ts = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
// 毫秒时间戳 -> LocalDateTime(北京时间)
LocalDateTime time = LocalDateTime.ofInstant(Instant.ofEpochMilli(ts), ZoneId.of("Asia/Shanghai"));
// 格式化
String str = time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
要不要我顺便也给你出一版 "直接封装好的工具类(TimeUtils)",一键搞定 LocalDateTime
↔ 时间戳
↔ 字符串
互转?
要的话告诉我,我可以直接打包一份给你用!🚀