行业资讯 2025年08月6日
0 收藏 0 点赞 336 浏览 2729 个字
摘要 :

文章目录 1.概述 2. 创建ZonedDateTime 2.1获取当前时间戳 2.2 使用值创建ZonedDateTime 3.将字符串解析为ZonedDateTime 4.格式化ZonedDateTime 5.向ZonedDateTime添……




  • 1.概述
  • 2. 创建ZonedDateTime
    • 2.1获取当前时间戳
    • 2.2 使用值创建ZonedDateTime
  • 3.将字符串解析为ZonedDateTime
  • 4.格式化ZonedDateTime
  • 5.向ZonedDateTime添加或减去时间

了解Java中的ZonedDateTime类,如何创建其实例以及诸如解析、格式化和添加持续时间和时间段的用例。

1.概述

java.time.ZonedDateTime类是在Java 8日期时间API中引入的,表示带有区域id和区域偏移量信息的ISO-8601日历系统中的日期和时间。该类将所有日期和时间字段存储到纳秒精度。

ZonedDateTime实例可用于将普遍时间线中的实例转换为LocalDateTime,其中差异是区域偏移量,并且偏移量是根据时区规则计算的。请注意,当夏令时(DST)切换时,时区id在一年中可能有不同的偏移量。在这种情况下,ZonedDateTime始终具有该时区的当前偏移量。

我们可以在需要向全球分布式用户表示时间的情况下使用ZonedDateTime实例。例如,我们可以将其用于通信会议日期,与会者将根据其本地日期和时间在线连接。

ZonedDateTime保存的状态相当于三个单独的对象:一个LocalDateTime、一个ZoneId以及解析的ZoneOffset。

ZonedDateTime实例是不可变的,线程安全的。该类定义如下:

public final class ZonedDateTime
    extends Object
    implements Temporal, ChronoZonedDateTime<LocalDate>, Serializable
{
    //类体
}

2. 创建ZonedDateTime

通常,我们将在两种情况下创建ZonedDateTime实例,即获取当前时间戳或创建一个具有特定时区ID和偏移量的时间戳。

2.1获取当前时间戳

使用now()方法获取具有当前时区ID和偏移量的当前时间戳。要获取另一个时区的相同实例,请将时区ID传递给now()方法。

ZonedDateTime now = ZonedDateTime.now();
ZonedDateTime now = ZonedDateTime.now( ZoneId.of(\"GMT+08:00\") );

2.2 使用值创建ZonedDateTime

要使用给定的日期、时间和时区信息创建时间戳,请使用of()方法,该方法接受各种参数以形成实例。

ZoneId zoneId = ZoneId.of(\"UTC+1\");
ZonedDateTime zdt = ZonedDateTime.of(2015, 11, 30, 23, 45, 59, 1234, zoneId);
//从其他local实例创建
LocalDate localDate = LocalDate.of(2019, 03, 12);
LocalTime localTime = LocalTime.of(12,  44);
ZoneId zoneId = ZoneId.of(\"GMT+05:30\");
ZonedDateTime timeStamp = ZonedDateTime.of( localDate, localTime, zoneId );

3.将字符串解析为ZonedDateTime

ZonedDateTime类具有两个重载的parse()方法,将字符串转换为ZonedDateTime实例。

parse(CharSequence text)    //1
parse(CharSequence text, DateTimeFormatter formatter)    //2
  • 如果字符串包含ISO_ZONED_DATE_TIME模式中的时间,即2019-03-28T10:15:30+01:00[Europe/Paris],请使用第一个方法。这是默认模式。
  • 对于任何其他日期时间模式,我们需要使用第二个方法,我们将日期时间作为字符串传递,以及表示该日期时间字符串模式的DateTimeFormatter。
//1 - 默认格式
String timeStamp = \"2019-03-27T10:15:30\";
ZonedDateTime localTimeObj = ZonedDateTime.parse(time);
//2 - 指定格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm:ss a\");
String timeStamp1 = \"2019-03-27 10:15:30 AM\";
ZonedDateTime localTimeObj1 = ZonedDateTime.parse(timeStamp1, formatter);

4.格式化ZonedDateTime

使用ZonedDateTime.format(formatter)方法将实例格式化为所需字符串模式。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm:ss a\");
ZonedDateTime now = ZonedDateTime.now();
String dateTimeString = now.format(formatter);    //2019-03-28 14:47:33 PM

5.向ZonedDateTime添加或减去时间

ZonedDateTime提供了以下方法进行修改。所有方法都返回ZonedDateTime的新实例,因为现有实例始终是不可变的。

  • plusYears()
  • plusMonths()
  • plusDays()
  • plusHours()
  • plusMinutes()
  • plusSeconds()
  • plusNanos()
  • minusYears()
  • minusMonths()
  • minusDays()
  • minusHours()
  • minusMinutes()
  • minusSeconds()
  • minusNanos()
ZonedDateTime now = ZonedDateTime.now();
//3 小时后
ZonedDateTime zonedDateTime1 = now.plusHours(3);
//3 分钟前
ZonedDateTime zonedDateTime2 = now.minusMinutes(3);
//明年同一时间
ZonedDateTime zonedDateTime2 = now.plusYears(1);
//去年同一时间
ZonedDateTime zonedDateTime2 = now.minusYears(1);

以上就是Java ZonedDateTime详解的全部内容。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9606.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号