Попытка вычислить возраст в заводной - PullRequest
2 голосов
/ 24 октября 2010

У меня есть объект даты, который содержит день рождения человека.Мой код выглядит так:

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 ]

6 голосов
/ 24 октября 2010

Вы можете просто создать один календарь с текущей датой и использовать год для вычисления возраста:

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 из разницы между годами.

4 голосов
/ 21 октября 2011

Я знаю, что это старый вопрос, но это вдохновило меня на создание этой функции, работающей с датами:

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)
}

Вы можете назвать его только с днем ​​рождения, чтобы вычислить возраст сегодня, или со вторым аргументом, когда вы хотите вычислить возраст людей.

0 голосов
/ 02 ноября 2015
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()
...