Joda-Time根据年龄设置日期对象

时间:2016-01-08 15:54:23

标签: java date jodatime

我正在尝试为某个类编写测试用例。我想将测试用户的年龄设置为某个值,但我不想处理年龄计算和/或使junit测试用例与时间无关,我知道该怎么做感谢来自我的@SkinnyJ earlier post

有没有办法做类似的事情:

LocalDate birthday = new LocalDate(72Y3M);

72岁零3个月是用户的理想年龄。然后joda-time将取这个数字并计算他/她的生日应该是那个年龄并返回该日期。所以在这种情况下,生日将是October 8, 1943

尝试1:

public LocalDate setUsersAge(int years, int months, int days) {
    LocalDate birthday = new LocalDate();
    birthday.minusYears(years);
    birthday.minusMonths(months);
    birthday.minusDays(days);

    return birthday
}

尝试2:

public LocalDate setUsersAge(int years, int months, int days) {
    Period age = new Period();
    age.withYears(years);
    age.withMonths(months);
    age.withDays(days);

    return birthday.minus(age);
}

虽然双向完成工作,但我不喜欢代码的外观。有更清洁的方法吗?

1 个答案:

答案 0 :(得分:2)

我认为这是实现目标的一种相当简洁的方法:

public LocalDate setUsersAge(int years, int months, int days) {
    return LocalDate.now().minusYears(years).minusMonths(months).minusDays(days);
}

编辑:感谢Basil Bourque的评论,如果您担心timeZone的问题,可以执行以下操作:

    public LocalDate setUsersAge(int years, int months, int days, DateTimeZone timeZone) {
        return LocalDate.now(timeZone).minusYears(years).minusMonths(months).minusDays(days);
}
相关问题