在统计的数据是时候,要统计某月、日、小时的数据。开始时间月、日、小时的最初时间,结束时间是月、日、小时的最晚时间。该如何处理呢?
比如: 2020-10-10 08:22:45
小时开始时间:2020-10-10 08:00:00
小时开始时间:2020-10-10 08:59:59
日开始时间:2020-10-10 00:00:00
日开始时间:2020-10-10 23:59:59
月开始时间:2020-10-01 00:00:00
月开始时间:2020-10-31 23:59:59
处理的时候,要对时间进行截取和拼接。
直接上代码:
代码:
private static String datePattern = "yyyy-MM-dd";
private static String dateHourPattern = "yyyy-MM-dd HH";
private static String dateTimePattern = "yyyy-MM-dd HH:mm:ss";
/**
* 时间转时间字符串
* @param date 日期
* @param pattern 格式
* @return String
*/
public static String format(Date date, String pattern) {
if (date == null)
return "";
return DateFormatUtils.format(date, pattern);
}
/**
* 时间转时间字符串为yyyy-MM-dd HH:mm:ss 格式
* @param date 日期
* @return String
*/
public static String formatDateTime(Date date) {
if (date == null)
return "";
return DateFormatUtils.format(date, dateTimePattern);
}
/**
* 时间字符串转化为yyyy-MM-dd HH:mm:ss 格式
* @param str 日期
* @return Date
*/
public static Date parseDateTime(String str) {
if (str == null)
return null;
try {
return DateUtils.parseDate(str, dateTimePattern);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 字符串转时间
* @param str 字符串
* @param dateTimePattern 格式
* @return Date
*/
public static Date parseDateTime(String str, String dateTimePattern) {
if (str == null)
return null;
try {
return DateUtils.parseDate(str, Locale.CHINESE, dateTimePattern);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
public static Date formatDateTimeHourZero(Date date) {
String formatDate = format(date, dateHourPattern);
return parseDateTime(formatDate + ":00:00");
}
public static Date formatDateTimeHourEnd(Date date) {
String formatDate = format(date, dateHourPattern);
return parseDateTime(formatDate + ":59:59");
}
public static Date formatDateTimeDayZero(Date date) {
String formatDate = format(date, datePattern);
return parseDateTime(formatDate + " 00:00:00");
}
public static Date formatDateTimeDayEnd(Date date) {
String formatDate = format(date, datePattern);
return parseDateTime(formatDate + " 23:59:59");
}
/**
* 获取指定日期所在月的第一天
* @param date 日期
* @return 所在月的第一天
*/
public static Date getFirstOfMonth(Date date){
//获取当前月第一天:
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天
return calendar.getTime();
}
/**
* 获取指定日期所在月的第最后一天
* @param date 日期
* @return 最后一天
*/
public static Date getLastOfMonth(Date date) {
//获取当前月最后一天
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return calendar.getTime();
}
public static void main(String args[]) {
Date date = parseDateTime("2020-10-10 08:22:45");;
System.out.println("=========hour=========");
Date hourStart = formatDateTimeHourZero(date);
System.out.println(formatDateTime(hourStart));
Date hourEnd = formatDateTimeHourEnd(date);
System.out.println(formatDateTime(hourEnd));
System.out.println("=========day=========");
Date dayStart = formatDateTimeDayZero(date);
System.out.println(formatDateTime(dayStart));
Date dayEnd = formatDateTimeDayEnd(date);
System.out.println(formatDateTime(dayEnd));
System.out.println("=========month=========");
Date monthStart = getFirstOfMonth(date);
monthStart = formatDateTimeDayZero(monthStart);
System.out.println(formatDateTime(monthStart));
Date monthEnd = getLastOfMonth(date);
monthEnd = formatDateTimeDayEnd(monthEnd);
System.out.println(formatDateTime(monthEnd));
}
结果:
=========hour=========
2020-10-10 08:00:00
2020-10-10 08:59:59
=========day=========
2020-10-10 00:00:00
2020-10-10 23:59:59
=========month=========
2020-10-01 00:00:00
2020-10-31 23:59:59
总结
在获取月、日、时开始和结束时间的时候,先对日期进行格式化,再拼接尾巴的内容。