Java日历添加问题

时间:2012-06-20 16:29:28

标签: java calendar

我遇到了Java Calendar add()功能的问题。给予或接受用于提供在旅行网站上离开的日期的迂回日期。

end.add(Calendar.DATE, Integer.parseInt(giveOrTake));

代码在上面,我正在使用的测试条件是选择29/07/2012作为日期和3天给予或采取。根据文件,这应该是01/08/2012,但它出现在2012年7月1日。

当它被传递给方法时我已经检查过giveOrTake并且没关系,所以我不知道发生了什么。我可以硬编码giveOrTake值并仍然得到错误。

3 个答案:

答案 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类。

此外,您正在使用日期时间对象来表示仅限日期的值,不合适。

使用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.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore