今天在做项目的时候,遇到一个需求,统计时间段内用户的数量(包括关注的用户/取消关注的用户/净增长的用户/总用户数量等),我当时考虑到计算两个时间段的天数差,然后循环对每一天分别做统计,我想循环的时候需要考虑加一天之后到了下一个月或者是下一年,都需要判断的。我使用的计算时间段内的天数的方法是:
Date startDate = new Date(Long.valueOf(startTime));
Date endDate = new Date(Long.valueOf(endTime));
int count = (int)((endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24));
传递的参数开始时间和结束时间都是String类型的。后来一个老员工审查我的code的时候告诉我使用org.joda.time是best practice(最佳实践),使用org.joda.time不需要考虑加一天之后会变成下一年或者下一个月。它帮我们做了。
//需要导的包
import org.joda.time.Days;
import org.joda.time.LocalDate;
LocalDate startLocalDate = LocalDateUtil.getLocalDate(startTime);
LocalDate endLocalDate = LocalDateUtil.getLocalDate(endTime);
int days = Days.daysBetween(startLocalDate, endLocalDate).getDays();
//还可以使用org.joda.time.Period来完成天数的计算,之后我会补充
以下是一些常用的封装的LocalDate的方法:
//String类型的时间撮转LocalDate
public static LocalDate getLocalDate(String dateStr) {
LocalDate localDate = null;
if (StringUtils.hasText(dateStr)) {
localDate = new LocalDate(Long.valueOf(dateStr));
} else {
localDate = new LocalDate();
}
return localDate;
}
//long类型的时间撮转LocalDate