添加java时间对象

添加java时间对象,java,datetime,time,Java,Datetime,Time,如何说,从calendar.getTime向给定结果添加1小时?好的,您可以向日期的毫秒值添加1000*60*60。如果您不想改变日历实例本身,这可能是最简单的方法。(顺便说一句,我不想猜测Calendar在DST更改前后会做些什么。如果你明白我的意思的话,这很可能不是增加一小时的UTC时间。) Calendar cal = Calendar.getInstance(); //cal.setTime(date); //if you need to pass in a date cal.add(C

如何说,从calendar.getTime向给定结果添加1小时?

好的,您可以向
日期的毫秒值添加1000*60*60。如果您不想改变
日历
实例本身,这可能是最简单的方法。(顺便说一句,我不想猜测
Calendar
在DST更改前后会做些什么。如果你明白我的意思的话,这很可能不是增加一小时的UTC时间。)

Calendar cal = Calendar.getInstance();
//cal.setTime(date); //if you need to pass in a date
cal.add(Calendar.HOUR, 1);
因此,如果您确实希望采用日期方法:

date.setTime(date.getTime() + 1000 * 60 * 60);
这将始终添加一个实际小时,而不考虑时区,因为
Date
实例没有时区-它只是从1970年1月1日UTC午夜开始的毫秒数的包装

但是,我强烈建议您改用Java日期/时间问题。它使这项任务和其他无数任务变得更加容易和可靠。我知道我在这方面听起来像是一张破唱片,但事实上,它迫使你思考你是否真的在谈论一个当地的日期/时间,仅仅是一个日期,当地的午夜等等,这会产生很大的不同。

tl;博士 ……或者

ZonedDateTime.now( ZoneId.of( "America/Montreal"  ).plusHours( 1 ) 
使用java.time 公认的答案是正确的,但已过时

麻烦的旧遗留日期时间类已被java.time类取代

不要使用
日历
,而是使用
分区日期时间

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.now( z );
ZonedDateTime zdtOneHourLater = zdt.plusHours( 1 );
请注意,事件可能不会在一小时后发生。异常情况,如一小时后的平均值,可能是两小时后DST切换从凌晨1点跳到凌晨3点

有关从旧的
日历
转换为现代java.time类型的信息,请参阅

您的大部分工作都应该使用UTC。为此,请使用
Instant

Instant hourLater = Instant.now().plusHours( 1 );
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如
java.util.date
.Calendar
,&
java.text.SimpleDateFormat

该项目现已启动,建议迁移到java.time

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释

大部分java.time功能都在中向后移植到java 6和7,并进一步适应于中(请参阅)


该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,如
Interval
YearWeek
YearQuarter
,等等。

试图找出为什么这会被否决……可能是因为它是一条直线。。但这并不是一个复杂的问题。刚刚接触java。哦,有些人确实很差劲,我想可能就是这样。事实上,当你进入DST变化时,这是一个非常复杂的问题。例如,您是否总是希望01:30+1小时是02:30?+1取消否决票。堆栈溢出应该是一个人们可以提出合法问题的地方,而不是让他们觉得自己很愚蠢。我不认为对简单的问题投否决票或用“你试过用谷歌搜索答案了吗?”来回答这些问题必然是合适的。@jim:对于这种事情,我根本不会使用日历。只要在任何地方都使用UTC时间——大部分时间甚至不需要使用人类可读的格式,只需使用自纪元以来的毫秒数即可。然后,您只需添加所需的毫秒数。只有当您需要向他人显示时,才将其格式化为人类可读的形式。DST为+1-极易丢失,几乎不可能在4个月后投入生产时复制和修复。顺便说一句,这是我今天看到的第二个问题,Jon的答案不是最重要的。我们所知道的世界是否正在突然走向尽头?:-)尽管你的回答很有深度,也很有帮助,里奇需要一些noobie的爱,他的回答正是我需要的。我本应该从javadocs中抓取一些东西,但没有抓到:)
Instant hourLater = Instant.now().plusHours( 1 );