我想通过以下方式计算一个人的年龄:
设 x 为一个人的年龄。
- 如果 x < 1 周,则返回天数
- 如果 1 周 < x < 1 个月,则返回周龄
- 如果 1 个月 < x < 1 年,则返回以月为单位的年龄
- 如果 1 年 < x 以年和月为单位返回年龄
我怎样才能计算那种年龄函数?
在处理日期时,我建议您使用 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 ) 添加所需的依赖项。
我建议您在您的案例天数中使用最小的可行时间单位重申您的条件,并使用它来构建您的 if 语句
// x is age in days
if (x < 7) {
return x;
}
if (x < 31) {
return x/7;
}
您还需要决定您认为一个月和一年有多少天,因为两者都不同。