为什么天没有正确添加到我的约会?

时间:2013-12-02 16:53:17

标签: java date-arithmetic gregorian-calendar

我正在尝试将随机天数添加到2010年1月1日,以使新日期介于当时(2013年12月2日)之间。这两个日期之间的总天数是1431.我用Google搜索了如何执行此操作,并发现添加小时数,您只需要使用HOUR字段。但是,当我尝试使用DATE字段时,我会超出预期的范围。

import java.util.Random;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class DateArithmetic{
    public static void main(String[] args){
            Random random = new Random();
            Calendar gc = new GregorianCalendar(2010, Calendar.JANUARY, 1, 0, 0, 1);

            System.out.println(gc.getTime());

            for(int i=0; i<100; i++){
                    gc.add(GregorianCalendar.DATE, random.nextInt(1431));
                    System.out.println(gc.getTime());
            }
    }
}

4 个答案:

答案 0 :(得分:5)

您要向相同的 Calendar对象添加100次随机天数。有意义的是,它几乎可以立即推进到今天的未来。

将每个循环上的GregorianCalendar对象重新初始化为初始日期。

答案 1 :(得分:0)

我建议使用JodaTime来实现这一目标。 java date api很老而且很忙。

JodaTime:http://www.joda.org/joda-time/

在joda时间,它会在语言环境时区看起来像这样:

final DateTime dateTime = new DateTime("01-01-2010");
dateTime.plusDays(random.nextInt(1431));

甚至更好:

final DateTime dateTime = new DateTime("01-01-2010");
final Duration duration = new Duration(dateTime, DateTime.now());
dateTime.plusDays(random.nextInt((int)duration.getStandardDays()));

答案 2 :(得分:0)

我建议你这样做

        -->Date date = gc.getTime();
        for(int i=0; i<100; i++){
            int val = random.nextInt(1431);
            gc.set(Calendar.DAY_OF_YEAR, val);
            System.out.println(gc.getTime() + " VAL=" + val);
            -->gc.setTime(date);
        }

保存您的第一个日期并将其设置回每个循环。

答案 3 :(得分:0)

以上所有解决方案都是正确的。但我只是修改了每次重新初始化gc对象时的代码

import java.util.Random;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class DateArithmetic{
public static void main(String[] args){
        Random random = new Random();
        Calendar gc = new GregorianCalendar(2010, Calendar.JANUARY, 1, 0, 0, 1);

        System.out.println(gc.getTime());

        for(int i=0; i<100; i++){
                gc.add(GregorianCalendar.DATE, random.nextInt(1431));
                System.out.println(gc.getTime());
                gc = new GregorianCalendar(2010, Calendar.JANUARY, 1, 0, 0, 1);
        }
    }
}

这也是工作