0

0

Java日期和时间API的语法基础

P粉602998670

P粉602998670

发布时间:2026-01-12 13:16:02

|

602人浏览过

|

来源于php中文网

原创

LocalDateTime 无时区,仅表示本地日历时间;ZonedDateTime 绑定时区(如 Asia/Shanghai),可正确处理夏令时和历史变更,适用于跨系统比对与持久化。

java日期和时间api的语法基础

LocalDateTime 和 ZonedDateTime 的核心区别在哪

LocalDateTime 表示“2024-05-20T14:30:00”只是本地日历时间,不带时区信息;ZonedDateTime 则明确绑定到某个时区(如 Asia/Shanghai),能正确处理夏令时、历史时区变更等场景。

常见错误:把服务器本地时间直接转成 ZonedDateTime 却没指定时区,结果默认用了系统时区,部署到海外服务器就出错。

  • LocalDateTime.now() 永远不包含时区,不能用于跨系统时间比对或持久化存储
  • ZonedDateTime.now(ZoneId.of("Asia/Shanghai")) 才是真正代表东八区当前时刻的可靠值
  • 数据库字段类型要匹配:PostgreSQL 用 timestamptzZonedDateTime,别用 timestamp without time zone

Instant 是什么,为什么它适合做时间戳存储

Instant 表示从 1970-01-01T00:00:00Z 开始的纳秒偏移量,本质就是 UTC 时间轴上的一个点。它没有时区概念,也不受本地格式影响,是跨系统、跨语言最安全的时间表示方式。

常见错误:用 System.currentTimeMillis() 构造 LocalDateTime,结果丢失了时区上下文,再转回 Instant 可能偏差一整天。

立即学习Java免费学习笔记(深入)”;

Javashop
Javashop

Javashop是基于 Java技术构建的开源网店系统,其特色是组件机制和模板引擎让扩展变得简单,可有第三方组件可供选择,降低二次开发成本。同时 Javashop推出 “ 第三方开发者合作共赢计划 ”,依托计时软件有效计算开发费用,期望在实现双赢的基础上走出我们国人自己开源模式 ,详见 :Javashop第三方开发者合作共赢计划Javashop v3.0 升级日志:一、机制1. 完善组件机制,更易

下载
  • 入库前一律转成 InstantzonedDateTime.toInstant()localDateTime.atZone(ZoneId.of("UTC")).toInstant()
  • 前端传来的 ISO 格式字符串(如 "2024-05-20T14:30:00Z")可直接用 Instant.parse()
  • 不要用 new Date().toInstant() —— Date 是遗留类,语义模糊,容易引发隐式时区转换

DateTimeFormatter 的 pattern 字符必须严格区分大小写

yyyyYYYY 不是一回事:yyyy 是“年份”,YYYY 是“基于周的年份”,在每年年初或年末可能差一年;MM 是月份,mm 是分钟,写错就解析失败或结果错乱。

常见错误:用 DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") 解析带毫秒的字符串(如 "2024-05-20T14:30:00.123"),抛出 DateTimeParseException

  • 解析含毫秒的 ISO 时间,优先用内置常量:DateTimeFormatter.ISO_LOCAL_DATE_TIMEDateTimeFormatter.ISO_INSTANT
  • 自定义 pattern 必须匹配输入:毫秒用 SSS,纳秒用 nnn,时区用 XXX(如 +08:00)或 ZZZ(如 GMT+08:00
  • 避免手动拼接字符串:用 LocalDateTime.format() 而不是 String.format(),后者无法处理时区偏移

ZoneId 和 ZoneOffset 的使用边界

ZoneOffset 是固定偏移(如 +08:00),不随夏令时变化;ZoneId 是真实地理时区(如 Europe/London),会自动应用 DST 规则。两者不能混用。

常见错误:用 ZoneOffset.of("+08:00") 替代 ZoneId.of("Asia/Shanghai"),看似一样,但遇到中国未来调整时区规则时,前者永远不变,后者可通过 JDK 更新支持新规则。

  • 只在明确需要固定偏移的场景用 ZoneOffset(如日志时间统一打成 UTC+0)
  • 涉及用户本地时间、业务营业时间、节假日计算等,必须用 ZoneId
  • ZoneId.systemDefault() 不可靠——服务器时区可能被运维修改,应显式配置并注入,比如 Spring Boot 中通过 @Value("${app.timezone:Asia/Shanghai}")
ZoneId shanghai = ZoneId.of("Asia/Shanghai");
LocalDateTime local = LocalDateTime.of(2024, 3, 31, 2, 30, 0); // 凌晨2:30
ZonedDateTime zdt = local.atZone(shanghai); // 自动按规则处理是否为夏令时(中国不实行,但逻辑存在)
System.out.println(zdt); // 2024-03-31T02:30+08:00[Asia/Shanghai]
时区规则更新、夏令时边界、毫秒精度截断——这些细节不会报错,但会在特定日期、特定地区悄悄出错。写时间逻辑时,别依赖“看起来对”。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

831

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

737

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

733

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

397

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

430

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16925

2023.08.03

Java 项目构建与依赖管理(Maven / Gradle)
Java 项目构建与依赖管理(Maven / Gradle)

本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

4

2026.01.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.4万人学习

C# 教程
C# 教程

共94课时 | 6.5万人学习

Java 教程
Java 教程

共578课时 | 45.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号