localdatetime是java 8引入的无时区本地日期时间类,用于表示年月日时分秒纳秒;推荐用now()、of()、parse()等静态方法创建,不可变,支持字段提取、调整、增减及与instant、zoneddatetime等类型转换。

Java 8 引入的 LocalDateTime 是处理“不含时区、不含偏移”的本地完整日期时间(年月日 + 时分秒纳秒)的核心类,适合表示系统本地时间、数据库中无时区的时间字段、业务逻辑中的时间点计算等场景。
创建 LocalDateTime 实例
不依赖系统时钟或字符串解析时,推荐用静态工厂方法构造清晰、可读性强的时间对象:
-
当前时刻:
LocalDateTime.now()(基于默认时区的系统时钟,但结果仍是无时区的本地时间) -
指定年月日时分秒:
LocalDateTime.of(2025, 4, 12, 14, 30, 45)或LocalDateTime.of(2025, Month.APRIL, 12, 14, 30, 45, 123_000_000) -
从 LocalDate 和 LocalTime 组合:
LocalDateTime.of(date, time) -
解析字符串(需格式匹配):
LocalDateTime.parse("2025-04-12T14:30:45.123", DateTimeFormatter.ISO_LOCAL_DATE_TIME)
提取与修改时间字段
LocalDateTime 是不可变对象,所有修改操作都返回新实例:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 获取字段:
time.getYear()、time.getMonthValue()、time.getDayOfMonth()、time.getHour()、time.getMinute()等 - 调整时间:
time.withYear(2026)、time.withHour(9)、time.with(TemporalAdjusters.firstDayOfNextMonth()) - 增减时间:
time.plusDays(7)、time.minusHours(2)、time.plus(3, ChronoUnit.WEEKS)
与其他时间类型转换
实际开发中常需桥接其他类型,注意语义和时区处理:
-
转 Instant(需指定时区):
localDateTime.atZone(ZoneId.systemDefault()).toInstant()—— 这是把本地时间“解释为”系统时区对应的时间点 -
转 ZonedDateTime:
localDateTime.atZone(ZoneId.of("Asia/Shanghai")) -
转 LocalDate / LocalTime:
localDateTime.toLocalDate()、localDateTime.toLocalTime() -
从 Instant 转回(需时区):
instant.atZone(ZoneId.systemDefault()).toLocalDateTime()
格式化与解析注意事项
默认格式(如 toString() 输出)是 ISO 格式 "2025-04-12T14:30:45.123"。自定义格式用 DateTimeFormatter:
- 预定义格式器:
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS") - 解析时务必确保字符串与模式严格匹配,否则抛
DateTimeParseException - 避免使用过时的
SimpleDateFormat,它不是线程安全的,也不支持LocalDateTime
LocalDateTime 不代表一个全球统一的时间点,它只是“某地某时”的快照。做跨时区比较或存储到数据库前,确认是否需要转为 Instant 或带时区类型;若仅做同地日期计算(如订单有效期、排班逻辑),它足够简洁可靠。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










