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

Joda-Time set date object based on age

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

那么有没有办法做这样的事情:

LocalDate birthday = new LocalDate(72Y3M);

72 岁零 3 个月是用户期望的年龄。然后 joda-time 将采用该数字并计算 his/her 生日应该是那个年龄和 return 那个日期。所以在这种情况下生日将是 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);
}

虽然这两种方法都能完成工作,但我只是不喜欢代码的外观。有更简洁的方法吗?

我认为这是实现 objective:

的一种相当简洁的方法
public LocalDate setUsersAge(int years, int months, int days) {
    return LocalDate.now().minusYears(years).minusMonths(months).minusDays(days);
}

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

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