gpt4 book ai didi

java - 如何更新接近当前日历的 Java 日历对象

转载 作者:行者123 更新时间:2023-12-01 09:41:58 25 4
gpt4 key购买 nike

我有一个日历对象,设置为 2 年前。我想通过添加小时数来更新此日历对象以接近当前时间,但它不应超过当前时间。

例如,原始日期为2015年6月24日- 11:20:52:200

当前时间是2016年7月14日- 14:08:30:100

我想获取时间戳Jul 14,2016-13:20:52:200

如果需要的话,更新应该在几天内向后传播。如果原始时间是 June 24,2015 00:20:50:200,当前时间是 June 27,2015 00:15:20:100,我需要获取2016年6月26日23:20:200

Java 8 中有提供这种功能的 native 方法吗?

最佳答案

java.time

java.util.Calendar 类现已被 java.time 取代框架内置于 Java 8 及更高版本中。这些类取代了旧的麻烦的日期时间类,例如 java.util.Date、.Calendar 和 java.text.SimpleDateFormat。/p>

要了解更多信息,请参阅 Oracle Tutorial 。并在 Stack Overflow 上搜索许多示例和解释。

许多 java.time 功能已向后移植到 ThreeTen-Backport 中的 Java 6 和 7并在ThreeTenABP进一步适配Android .

本地时间

LocalTime 类单独表示一天中的时间,没有日期和时区。

我们可以从您过去的日期时间和当前日期时间中提取LocalTime并进行比较。如果过去的LocalTime与当前的相同或更早,我们可以坚持使用当前的日期时间并调整到过去的时间。如果过去的 LocalTime 晚于当前的 LocalTime,那么我们必须使用昨天的日期。

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime pastZdt = ZonedDateTime.of( 2015 , Month.June, 24 , 11 , 20 , 52 , 200_000_000 , zoneId );
ZonedDateTime nowZdt = ZonedDateTime.now( zoneId );

LocalTime pastTOD = pastZdt.toLocalTime();
LocalTime nowTOD = nowZdt.toLocalTime();

ZonedDateTime target = null;
if( pastTOD.isAfter( nowTOD ) ) { // Use yesterday’s date.
target = ZonedDateTime.of( nowZdt.toLocalDate().minusDays( 1 ) , pastTOD , zoneId );

} else { // Else, the past time-of-day is same or ealier than today’s time-of-day, so use today's date.
target = ZonedDateTime.of( nowZdt.toLocalDate() , pastTOD , zoneId );
}

注意:由于诸如 Daylight Saving Time (DST) 之类的异常,该特定时间可能在此特定日期无效。 。请务必阅读类文档,以了解为解决此类困境而进行调整的结果行为。该行为可能会也可能不会满足您的需求(不可能有完美的补救措施)。

警告:上面的代码从未运行过。使用风险自负。如果发现缺陷,请编辑修复。

关于java - 如何更新接近当前日历的 Java 日历对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38385894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com