试图在groovy中计算年龄

时间:2010-10-24 16:25:02

标签: date groovy grails

我有一个持有人生日的约会对象。我的代码如下:

def getAge(){
    //birthday, birthYear, birthMonth, birthDayOfMonth are class level properties
    def c= new GregorianCalendar(birthYear, birthMonth-1, birthDayOfMonth)
    birthday = c.time
    //What do I do now?
}

我需要回复这个人的年龄。我如何在Groovy中做到这一点?年龄只需要是整数。

3 个答案:

答案 0 :(得分:6)

您可以使用当前日期创建一个日历,并使用年份来计算年龄:

def now = new GregorianCalendar()
def fake = new GregorianCalendar(now.get(Calendar.YEAR), birthMonth-1, birthDayOfMonth)
return now.get(Calendar.YEAR) - birthYear - (fake > now ? 1 : 0)

虚假日期用于了解生日是否已在当年通过,如果不是,则必须将1减去年份之间的差异。

答案 1 :(得分:4)

我知道这个问题已经过时了,但它启发了我创建这个函数,工作日期:

static Integer calculateAge(Date birthday, Date offset = new Date()) {
   def birthdayThisYear = offset.clone().clearTime()
    birthdayThisYear[MONTH]= birthday[MONTH]
    birthdayThisYear[DATE] = birthday[DATE]

    offset[Calendar.YEAR] - birthday[Calendar.YEAR] - (birthdayThisYear > offset ? 1 : 0)
}

您可以单独使用生日来计算今天的年龄,也可以使用第二个参数,即您想要计算人员年龄的日期。

答案 2 :(得分:0)

Date.metaClass.calculateAge = { Date offset = new Date() ->
        def birthdayThisYear = offset.clone().clearTime()
        birthdayThisYear[Calendar.MONTH]= delegate[Calendar.MONTH]
        birthdayThisYear[Calendar.DATE] = delegate[Calendar.DATE]
        return offset[Calendar.YEAR] - delegate[Calendar.YEAR] - (birthdayThisYear > offset ? 1 : 0)
    }

使用示例:

def dateParser = new java.text.SimpleDateFormat("yyyy-MM-dd")
dateParser.lenient = false

dateParser.parse('1980-02-23').calculateAge()