意外值设置java日历分钟数
我试图创建一个时间间隔,因为起点是当前时间,最小值和最大值由用户设置的特殊变量计算(上限)。因此,代码如下所示:意外值设置java日历分钟数,java,java.util.calendar,Java,Java.util.calendar,我试图创建一个时间间隔,因为起点是当前时间,最小值和最大值由用户设置的特殊变量计算(上限)。因此,代码如下所示: private static int upperBound = 1440; ..... Calendar calendar = Calendar.getInstance(); System.out.println("Now:\t\t\t" + calendar.getTime()); calendar.set(Calendar.MINUTE, -upperBound); System
private static int upperBound = 1440;
.....
Calendar calendar = Calendar.getInstance();
System.out.println("Now:\t\t\t" + calendar.getTime());
calendar.set(Calendar.MINUTE, -upperBound);
System.out.println("After the change:\t" + calendar.getTime());
输出为:
Now: Mon Jan 27 14:53:42 EET 2014
After the change: Sun Jan 26 14:00:42 EET 2014
但我希望是(变更后):2014年1月26日星期日14:53:42
这里出了什么问题?您应该使用方法,而不是set
calendar.add(Calendar.MINUTE, -upperBound);
tl;博士
细节
现代的方法是使用java.time类来取代麻烦的旧遗留Calendar
类
使用java.time
该类表示时间线上的一个时刻,分辨率为(小数点的九(9)位)
你可以在这上面加上大量的时间
Instant later = instant.plus( 24 , ChronoUnit.HOURS ) ;
如果你想增加特别的分钟数,那就这样吧
Instant later = instant.plus( 1440 , ChronoUnit.MINUTES );
如果要在日历中添加一天,则必须应用时区,以说明夏令时(DST)等异常情况
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
ZonedDateTime zdtLater = zdt.plusDays( 1 );
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 从哪里获得java.time类
- 后来
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 该项目专门为Android采用了ThreeTen Backport(如上所述)
- 看
Instant later = instant.plus( 1440 , ChronoUnit.MINUTES );
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
ZonedDateTime zdtLater = zdt.plusDays( 1 );