Java日历问题

时间:2013-05-24 06:22:04

标签: java algorithm oracle calendar

我做了一个小计划来计算几天。计算从5月22日起的150天。但结果是十月十八日。实际日期是10月19日。任何人都可以帮我找到我的代码有什么问题。


Calendar mine = new GregorianCalendar(2013, Calendar.MAY,22);
    int month = Calendar.MAY;
    int counter = 0;
    for(int i=mine.get(Calendar.DAY_OF_MONTH);i<=mine.getActualMaximum(Calendar.DAY_OF_MONTH);i++){
    System.out.println("i "+i);

        counter++;
        System.out.println("counter "+counter);
    if(i==mine.getActualMaximum(Calendar.DAY_OF_MONTH)){
        month++;
        i=1;

        mine.set(2013, month, i);
        counter++;
        System.out.println("i "+i+" "+mine.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH));
        if(counter == 150){

        System.out.println("day "+i+ counter +"days"+ "month:"+ mine.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH));
        break;
        }
    }
        if(counter == 150){

        System.out.println("i "+i+" counter "+ counter +" date:"+mine.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH));
        break;
        }
        }

3 个答案:

答案 0 :(得分:3)

您可以使用add

Calendar功能
Calendar mine = new GregorianCalendar(2013, Calendar.MAY,22);
mine.add(Calendar.DAY_OF_YEAR, 150);
System.out.println(mine.getTime());

将打印

Sat Oct 19 00:00:00 IST 2013

但您的代码存在的真正问题是,您首先递增counter,然后与150进行比较。

这样做,它应该修复你的代码

if(counter == 150){
   System.out.println("i "+i+" counter "+ counter +date:"+mine.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH));
   break;
}
counter++;

答案 1 :(得分:2)

或者您可以使用Joda DateTime:

import org.joda.time.DateTime;
....
System.out.println(new DateTime("2013-05-22").plusDays(150));

答案 2 :(得分:2)

TL;博士

LocalDate.of( 2013, Month.MAY, 22 )
         .plusDays( 150 )

使用java.time

现代java.time课程更容易。

LocalDate类表示没有时间且没有时区的仅限日期的值。

Month enum提供了十几个预定义的对象,一年中每个月都有一个。

LocalDate ld = LocalDate.of( 2013, Month.MAY, 22 ) ;
LocalDate later = ld.plusDays( 150 );

请参阅this code live at IdeOne.com

  

2013年10月19日

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

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

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

从哪里获取java.time类?

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

相关问题