我正在尝试将随机天数添加到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());
}
}
}
答案 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);
}
}
}
这也是工作