0

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

设 x 为一个人的年龄。

  • 如果 x < 1 周,则返回天数
  • 如果 1 周 < x < 1 个月,则返回周龄
  • 如果 1 个月 < x < 1 年,则返回以月为单位的年龄
  • 如果 1 年 < x 以年和月为单位返回年龄

我怎样才能计算那种年龄函数?

4

2 回答 2

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 ) 和 Period ( http://www.joda.org ) 的文档/joda-time/apidocs/org/joda/time/Period.html)。

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

于 2013-10-31T22:31:00.710 回答
0

我建议您在您的案例天数中使用最小的可行时间单位重申您的条件,并使用它来构建您的 if 语句

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

您还需要决定您认为一个月和一年有多少天,因为两者都不同。

于 2013-10-31T16:24:47.103 回答