当前位置: 首页 > 知识库问答 >
问题:

如何更新Java Calendar对象以接近当前日历

邹俊友
2023-03-14

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

如果需要,更新也应该以天为单位向后传播。如果原始时间为624,2015 00:20:50:200,而当前时间为627,2015 00:15:20:100,则需要获取626,2016 23:20:200

Java8中有没有提供这种功能的本地方法?

共有1个答案

霍锦
2023-03-14

Java.util.Calendar类现在被Java.Time框架所取代,Java8和更高版本中内置了这个框架。这些类取代了旧的麻烦的日期时间类,如java.util.date.calendar、&java.text.SimpleDateFormat

要了解更多信息,请参阅Oracle教程。并搜索堆栈溢出的许多例子和解释。

大部分Java.time功能在ThreeTen-Backport中被回移植到Java6和7,并在ThreetenABP中进一步适应Android。

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 );
}

注意:由于夏令时(DST)等异常现象,一天中的特定时间在此特定日期可能无效。一定要阅读类文档,以理解调整以修复这种困境的结果行为。这种行为可能满足你的需求,也可能不满足你的需求(没有完美的补救办法是可能的)。

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

 类似资料:
  • 问题内容: 我希望Selenium通过箭头键浏览菜单-首先单击顶部菜单项,然后按“ DOWN”,“ DOWN”,… 问题是您必须始终提供特定的元素才能将“ DOWN”发送到。 有什么方法可以获取当前元素? 我试过了: 但它表示该表达式无法识别或未返回正确的对象。 我希望我错过了一些愚蠢的把戏。 问题答案: 没有比访问更直接的方法了

  • 问题内容: 我希望Selenium通过箭头键浏览菜单-首先单击顶部菜单项,然后按“ DOWN”,“ DOWN”,… 问题是您必须始终提供特定的元素才能将“ DOWN”发送到。 有什么方法可以获取当前元素? 我试过了: 但它表示该表达式无法识别或未返回正确的对象。 我希望我缺少一些愚蠢的把戏。 问题答案: 不知道比访问更直接的方法 如何测试Selenium RC中关注的元素?

  • 问题内容: 我有两个叫和的表。我想创建一个触发器,更新列上在每个新的插入表的表。 表客户:customer_id,名称,last_sale,… 表销售额:sale_id,customer_id,日期,… 我已经开始写作,但我不知道该怎么做。 有人可以帮我吗? 问题答案: 然后 是即将在销售表中插入的行。(对于更新行,将取决于该行在更新之后的外观,以及该行在更新之前的外观)。