我遇到了Java Calendar add()功能的问题。给予或接受用于提供在旅行网站上离开的日期的迂回日期。
end.add(Calendar.DATE, Integer.parseInt(giveOrTake));
代码在上面,我正在使用的测试条件是选择29/07/2012作为日期和3天给予或采取。根据文件,这应该是01/08/2012,但它出现在2012年7月1日。
当它被传递给方法时我已经检查过giveOrTake并且没关系,所以我不知道发生了什么。我可以硬编码giveOrTake值并仍然得到错误。
答案 0 :(得分:5)
适合我:
import java.util.*;
public class Test {
public static void main (String []args) {
Calendar calendar = Calendar.getInstance();
calendar.set(2012, Calendar.JULY, 29);
calendar.add(Calendar.DATE, 3);
System.out.println(calendar.getTime()); // August 1st
}
}
我的猜测是,在呼叫add
之前错误地显示了一个月 - 请注意我之前对set
的调用是如何使用 6 的月份,因为呼叫使用基于0的月份数字。
请注意,根据我对该问题的评论,如果可以的话,最好转到Joda Time ...
答案 1 :(得分:0)
这是日期格式的问题。当它应该是'yyyyMMdd'时,它被设置为yyyymmdd
。
答案 2 :(得分:0)
你正在使用麻烦的旧日期时间类,现在是旧的,取而代之的是java.time类。
此外,您正在使用日期时间对象来表示仅限日期的值,不合适。
LocalDate
类表示没有时间且没有时区的仅限日期的值。
LocalDate ld = LocalDate.of( 2012 , 7 , 29 ) ;
LocalDate threeDaysLater = ld.plusDays( 3 );
ld.toString():2012-07-29
threeDaysLater.toString():2012-08-01
请参阅code run live in IdeOne.com。
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。