Joda Time - 获取日期差异

时间:2015-07-20 13:49:19

标签: java jodatime

我目前正试图获得两个日期之间的差异,并以月为单位返回差异。不知何故,我无法做到正确(阅读关于JT的其他线索)。这是我到目前为止所拥有的:

public final class DateUtils {

    private static DateTime dateTime = new DateTime();
    private  static Integer months;

    /**
     * Gets the difference in months, between local time and user's birth date
     */

    public static Integer getMonthDiff(User user) {

        months = Months.monthsBetween(dateTime, user.getUserDetails().getBirthDate()).getMonths();
        return months;
    }
}

我在整个代码中使用此类/方法,以获取去年创建帐户的用户(仅作为示例)。

public List<User> findCreatedLastYear() {

    List<User> users = findAll();
    List<User> tempList = new ArrayList<>();

    for (User user : users) {

        if( DateUtils.getMonthDiff(user) == 12){
            tempList.add(user);
        }
    }

    LOGGER.log(Level.INFO, String.format("{%d} user(s)created an account last year", tempList.size()));
    return tempList;
}

我的JUnit测试失败了,我不确定错误在哪里。

@Test
public void testFindLastYear() throws Exception {
    User user = userService.findAll().get(0);

    user.setAccountCreated(new DateTime(2014, 3, 3, 0 , 0, 0));
    Assert.assertNotNull(userService.findCreatedLastYear());
}

失败,因为它找到了具有该条件的0个用户。但是,我没有使用数据库(我通过课程生成用户)。

我认为原因在于我没有正确使用Joda Time。

以下是我从UT获得的信息:INFO:{0}用户去年创建了一个帐户

以下是我生成(模拟数据库)的方法。

列出用户=新的ArrayList&lt;&gt;();

for (int i = 0; i < size; i++) {
    User user = new User();

    user.setUsername("username_" + i);
    user.setPassword("psd_" + i);
    user.setEmail("username_" + i + "@dnet.org");
    user.setAccountCreated(new DateTime());
    user.setLastLogin(new DateTime());


    UserDetails userDetails = new UserDetails();

    userDetails.setFirstname("FirstName_" + i);
    userDetails.setLastname("LastName_" + i);
    userDetails.setBirthDate(new DateTime());

    user.setUserDetails(userDetails);

    users.add(user);
}

0 个答案:

没有答案