📌  相关文章
📜  Java中的 ZonedDateTime with() 方法及示例(1)

📅  最后修改于: 2023-12-03 15:01:58.310000             🧑  作者: Mango

Java中的 ZonedDateTime with() 方法及示例

在Java中,ZonedDateTime类表示带有时区的日期和时间。with()方法是修改该对象的日期和时间字段的方法之一。

方法签名
ZonedDateTime with(TemporalField field, long newValue)
ZonedDateTime with(TemporalAdjuster adjuster)
方法参数

with(TemporalField field, long newValue)方法需要两个参数,TemporalField类型的fieldlong类型的newValueTemporalField是一个枚举类型,列出了可能的日期和时间字段。newValue是该字段所需要的新值。

with(TemporalAdjuster adjuster)方法需要一个参数,TemporalAdjuster类型的adjusterTemporalAdjuster是一个接口,它提供了一组日期调整规则方法。

返回值

这两个方法都会返回一个新的ZonedDateTime对象,其中修改了指定字段或应用了指定的日期调整器。

示例
修改日期和时间字段
// 创建一个ZonedDateTime对象
ZonedDateTime zdt = ZonedDateTime.now();

// 打印原始日期时间
System.out.println("原始日期时间: " + zdt);

// 修改年份为2022
ZonedDateTime zdt_year = zdt.with(ChronoField.YEAR, 2022);
System.out.println("修改年份为2022: " + zdt_year);

// 修改月份为3月
ZonedDateTime zdt_month = zdt.with(ChronoField.MONTH_OF_YEAR, 3);
System.out.println("修改月份为3月: " + zdt_month);

// 修改日为15日
ZonedDateTime zdt_day = zdt.with(ChronoField.DAY_OF_MONTH, 15);
System.out.println("修改日为15日: " + zdt_day);

// 修改小时为16
ZonedDateTime zdt_hour = zdt.with(ChronoField.HOUR_OF_DAY, 16);
System.out.println("修改小时为16: " + zdt_hour);

// 修改分钟为30
ZonedDateTime zdt_minute = zdt.with(ChronoField.MINUTE_OF_HOUR, 30);
System.out.println("修改分钟为30: " + zdt_minute);

// 修改秒为40
ZonedDateTime zdt_second = zdt.with(ChronoField.SECOND_OF_MINUTE, 40);
System.out.println("修改秒为40: " + zdt_second);

输出:

原始日期时间: 2021-08-29T15:29:35.409687+08:00[Asia/Shanghai]
修改年份为2022: 2022-08-29T15:29:35.409687+08:00[Asia/Shanghai]
修改月份为3月: 2021-03-29T15:29:35.409687+08:00[Asia/Shanghai]
修改日为15日: 2021-08-15T15:29:35.409687+08:00[Asia/Shanghai]
修改小时为16: 2021-08-29T16:29:35.409687+08:00[Asia/Shanghai]
修改分钟为30: 2021-08-29T15:30:35.409687+08:00[Asia/Shanghai]
修改秒为40: 2021-08-29T15:29:40.409687+08:00[Asia/Shanghai]
应用日期调整器
// 创建一个ZonedDateTime对象
ZonedDateTime zdt = ZonedDateTime.now();

// 打印原始日期时间
System.out.println("原始日期时间: " + zdt);

// 将日期调整到下个月的第一天
ZonedDateTime zdt_nextMonthFirstDay = zdt.with(TemporalAdjusters.firstDayOfNextMonth());
System.out.println("将日期调整到下个月的第一天: " + zdt_nextMonthFirstDay);

// 将日期调整到今年的第一天
ZonedDateTime zdt_thisYearFirstDay = zdt.with(TemporalAdjusters.firstDayOfYear());
System.out.println("将日期调整到今年的第一天: " + zdt_thisYearFirstDay);

// 将时间调整到下个小时的第一分钟
ZonedDateTime zdt_nextHourFirstMinute = zdt.with(TemporalAdjusters.firstMinuteOfNextHour());
System.out.println("将时间调整到下个小时的第一分钟: " + zdt_nextHourFirstMinute);

输出:

原始日期时间: 2021-08-29T15:29:35.409687+08:00[Asia/Shanghai]
将日期调整到下个月的第一天: 2021-09-01T15:29:35.409687+08:00[Asia/Shanghai]
将日期调整到今年的第一天: 2021-01-01T15:29:35.409687+08:00[Asia/Shanghai]
将时间调整到下个小时的第一分钟: 2021-08-29T16:01:35.409687+08:00[Asia/Shanghai]

以上就是ZonedDateTime类的with()方法的介绍和示例。它可以很方便地修改时间字段或应用日期调整器来创建新的ZonedDateTime对象。