在Groovy中生成特定范围内的随机日期

时间:2015-03-17 21:02:45

标签: date groovy

我最近开始学习Grails和Groovy并且很难在一定范围内生成日期。

我可以根据年份差异生成日期。但是如何添加月份和日期呢?

这就是我使用DatesUtils

获得的
DateUtils.addYears(new Date() , -(18 + new Random().nextInt(20)))

这适用于根据年份生成日期。但我会一直在同一个月。如何在此添加一个月,以便我也可以将月份随机化

2 个答案:

答案 0 :(得分:7)

另一种方法:

Date randomDate(Range<Date> range) {
    range.from + new Random().nextInt(range.to - range.from + 1)
}

然后,你可以这样做:

def start = Date.parse('yyyy-MM-dd', '2015-01-01')
def end   = Date.parse('yyyy-MM-dd', '2015-01-10')
println randomDate(start..end)

答案 1 :(得分:0)

看起来你正试图创建一个18到38年前的随机日期。如果这是真的,你可以这样做:

Date curdate = new Date()
// compute the beginning and end of the range that you want to find a date between.
// note, I used a simple 365 day year, but you could use Calendar or even DateUtils
// to compute the actual dates of 18 and 38 years ago 
Date ago18yrs = curdate - (18*365)
Date ago38yrs = curdate - (38*365) 
// compute the number of days in the range
int daysbetween = ago18yrs.minus( ago38yrs )
// add a random number of days in the range to the beginning of the range
Date randomdate = ago38yrs + new Random().nextInt(daysbetween)

此时,randomdate应该是18到38年前的随机日期。