我正在尝试创建一个时间间隔,因为起点是当前时间,最小值和最大值是由用户设置的特殊变量(upperBound)计算的。所以代码看起来像:
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
但我希望(改变之后):Sun 1月26日14: 53 :42 EET 2014
这里有什么问题?
答案 0 :(得分:1)
您应该使用add()
方法,而不是set
calendar.add(Calendar.MINUTE, -upperBound);
答案 1 :(得分:0)
Instant.now()
.plus( 1440 , ChronoUnit.MINUTES )
现代的方法是使用java.time类来取代麻烦的旧遗留Calendar
类。
Instant
类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(9)位)。
Instant instant = Instant.now();
您可以为此添加一些时间。
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框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。