以下是我在平时的工作中使用 Calendar 类操作日期的一些方法:
public class DateUtils {
// 获取某一天的0时0分0秒时间
public static Date getStartTimeOfDay(Date dt) {
if (dt == null) {
return null;
}
Calendar cal = Calendar.getInstance();
cal.setTime(dt);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
// 获取某一天的23时59分59秒时间
public static Date getEndTimeOfDay(Date dt) {
if (dt == null) {
return null;
}
Calendar cal = Calendar.getInstance();
cal.setTime(dt);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.MILLISECOND, 999);
return cal.getTime();
}
// 判断某个时间是否在某个时间段范围内
public static boolean betweenCalendar(Date nowTime, Date beginTime, Date endTime) {
boolean result = false;
Calendar date = Calendar.getInstance();
date.setTime(nowTime);
Calendar begin = Calendar.getInstance();
begin.setTime(beginTime);
Calendar end = Calendar.getInstance();
end.setTime(endTime);
if (date.after(begin) && date.before(end)) {
result = true;
}
return result;
}
// 获取当前时间的年月日
public static String getCurrentDate() {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
StringBuilder sb = new StringBuilder();
sb.append(year).append("-").append(month).append("-").append(day);
return sb.toString();
}
// 获取某个日期的 前/后 几 年/月/天/分钟/秒
public static Date getTimeWithDay(Date date, int day) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 如果 day > 0,则是延后时间;如果 < 0,则是 提前时间
cal.add(Calendar.DAY_OF_MONTH, day);
// Calendar.MINUTE、Calendar.SECOND
return cal.getTime();
}
// 获取每周的第一天
public static Date getFirstOfWeek(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_WEEK, 2);
Date firstDayOfMonth = calendar.getTime();
return firstDayOfMonth;
}
// 获取每周的最后一天
public static String getLastOfWeek(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_WEEK, 2);
calendar.add(Calendar.WEEK_OF_MONTH, 1);//加一周
calendar.add(Calendar.DAY_OF_WEEK, -1);//在当前时间上减去天数
Date lastDayOfMonth = calendar.getTime();
return lastDayOfMonth;
}
// 获取每个月的第一天
public static String getFirstDay(Date date){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, 1);
Date firstDayOfMonth = calendar.getTime();
return simpleDateFormat.format(firstDayOfMonth);
}
// 获取每个月的最后一天
public static String getLastDate(Date date){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.add(Calendar.MONTH, 1);//加一个月
calendar.add(Calendar.DAY_OF_MONTH, -1);
Date lastDayOfMonth = calendar.getTime();
return simpleDateFormat.format(lastDayOfMonth);
}
// 获取下/上一个月第一天
public static String getFirstDayNextMonth() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH,1);
calendar.add(Calendar.MONTH, 1);
// calendar.add(Calendar.MONTH, -1);
return format.format(calendar.getTime());
}
}
应用场景:查询当天的数据量有多少?
思路:当天的0时0分0秒 <= 某个时间 <= 当天的23时59分59秒。
如:
public int queryNumber() {
StringBuilder sb = new StringBuilder();
List<Object> params = new ArrayList<>();
sb.append(" SELECT ");
sb.append(" COUNT(*) ");
sb.append(" FROM ");
sb.append(" TAB_PROPERTY_TRANSACTIONS ");
sb.append(" WHERE 1=1 ");
// 通过时间进行过滤
sb.append(" AND DT_CREATE_TIME >= ? ");
params.add(RoomCleaningUtlis.getStartTimeOfDay(new Date()));
sb.append( "AND DT_CREATE_TIME <= ? ");
params.add(RoomCleaningUtlis.getEndTimeOfDay(new Date()));
List<Integer> list = getJdbcOperation().queryForList(sb.toString(), params, Integer.class);
if (null != list && list.size() != 0){
return list.get(0);
}
return 0;
}