Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
意外值设置java日历分钟数_Java_Java.util.calendar - Fatal编程技术网

意外值设置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(如上所述)
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如、、和

Instant later = instant.plus( 1440 , ChronoUnit.MINUTES );
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
ZonedDateTime zdtLater = zdt.plusDays( 1 );