java calendar 获取星期、月份起始、终止

写了一个小工具,用来统计部门的问题解决情况.

期间使用到了时间的比较查询.

开始的结论是始终第一天跟最后一天数据消失。

排查之后,问题得到解决. 时间问题导致的。

之前是这个

/**
 * 获取星期的第一天
 * 星期一
 * @param date
 * @return
 */
public static Date getWeekStar(Date date){
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.set(Calendar.DAY_OF_WEEK, calendar.getActualMinimum(Calendar.DAY_OF_WEEK));
    calendar.add(Calendar.DATE, 1);
    return calendar.getTime();
}
/**
 * 获取指定日期月初
 * @param date
 * @return
 */
public static Date getMonthStar(Date date){
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
    return calendar.getTime();
}

修改正之后

/**
 * 获取星期的第一天
 * 星期一
 * @param date
 * @return
 */
public static Date getWeekStar(Date date){
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.set(Calendar.DAY_OF_WEEK, calendar.getActualMinimum(Calendar.DAY_OF_WEEK));
    calendar.add(Calendar.DATE, 1);
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    return calendar.getTime();
}
/**
 * 获取指定日期月初
 * @param date
 * @return
 */
public static Date getMonthStar(Date date){
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    return calendar.getTime();
}

其中:

calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);

如果你的数据库存储的是时间格式.上面必须添加。

因为时间默认比较会到毫秒.

数据存储的格式刚好是:yyyy-mm-dd HH:mm

毫秒存储为0,比较的有时全比较.导致数据出不来.

虽然是个小坑,但是也花了时间来弄的,记录下。

发表评论

电子邮件地址不会被公开。 必填项已用*标注