我目前正试图获得两个日期之间的差异,并以月为单位返回差异。不知何故,我无法做到正确(阅读关于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);
}