在Groovy中计算一个人的详细年龄?

时间:2013-10-31 16:15:34

标签: java grails groovy

我想用以下方式计算一个人的年龄:

让x成为一个人的年龄。

  • 如果x< 1周返回年龄
  • 如果1周< x< 1个月的返回年龄
  • 如果1个月< x< 1个月的返回年龄
  • 如果1年< x年龄和月份的返回年龄

如何计算这种年龄函数?

2 个答案:

答案 0 :(得分:3)

使用日期时,我建议您使用Joda-Time(http://www.joda.org/joda-time/index.html)。然后你就可以这样做:

import org.joda.time.DateTime
import org.joda.time.Period

String getAge(birthday) {
    def period = new Period(birthday, new DateTime())

    int years = period.getYears()
    int months = period.getMonths()
    int weeks = period.getWeeks()
    int days = period.getDays()

    String age

    if (years > 0) {
        age = "${years} year(s) and ${months} month(s)"
    } else if (months > 0) {
        age = "${months} month(s)"
    } else if (weeks > 0) {
        age = "${weeks} week(s)"
    } else {
        age = "${days} day(s)"
    }

    return age
}

有关更多信息,请查看DateTime(http://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html)和句点(http://www.joda.org/joda-time/apidocs/org/joda/time/Period.html)的文档。

由于您使用Grails标记了您的问题,我猜测您需要为Grails项目使用此功能。如果是这样,您可以使用Joda-Time插件(http://grails.org/plugin/joda-time)添加所需的依赖项。

答案 1 :(得分:0)

我建议您使用最小的可行时间单位重新创建条件,在您的情况下,并使用它来构建您的if语句

// x is age in days
if (x < 7) {
    return x;
}
if (x < 31) {
    return x/7;
}

您还需要决定考虑一个月和一年的天数,因为两者都有所不同。