import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import static java.util.Calendar.DAY_OF_MONTH;
public class DateUtil {
/**
* 根据年月获取当月每天的开始和结束时间
*
* @param year 年
* @param month 月
* @return Map<String, String>
*/
public static Map<String, String> getDayByMonth(int year, int month) {
Map<String, String> map = new TreeMap<>();
Calendar calendar = Calendar.getInstance(Locale.CHINA);
calendar.set(year, month, 0);
int currentYear = calendar.get(Calendar.YEAR);//年份
int currentMonth = calendar.get(Calendar.MONTH) + 1;//月份
int day = calendar.getActualMaximum(Calendar.DATE);
for (int i = 1; i <= day; i++) {
String date = null;
if (currentMonth < 10 && i < 10) {
date = currentYear + "-0" + currentMonth + "-0" + i;
}
if (currentMonth < 10 && i >= 10) {
date = currentYear + "-0" + currentMonth + "-" + i;
}
if (currentMonth >= 10 && i < 10) {
date = currentYear + "-" + currentMonth + "-0" + i;
}
if (currentMonth >= 10 && i >= 10) {
date = currentYear + "-" + currentMonth + "-" + i;
}
map.put(date + " 00:00:00", date + " 23:59:59");
}
return map;
}
/**
* 根据年月获取当月的每天开始和下一天开始时间(即每天)
*
* @param year 年
* @param month 月
* @return Map<String, String> 当天的开始<=date<下一天的开始
*/
public static Map<String, String> getDaysByMonth(int year, int month) {
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, 0);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
int days = calendar.getActualMaximum(Calendar.DATE);
int currentMonth = calendar.get(Calendar.MONTH) + 1;
System.out.println(currentMonth);
Map<String, String> map = new TreeMap<>();
for (int day = 1; day <= days; day++) {
calendar.set(DAY_OF_MONTH, day);
String todayStr = format.format(calendar.getTime());
calendar.set(DAY_OF_MONTH, calendar.get(DAY_OF_MONTH) + 1);
Date tomorrow = calendar.getTime();
String tomorrowStr = format.format(tomorrow);
map.put(todayStr + " 00:00:00", tomorrowStr + " 00:00:00");
}
return map;
}
/**
* 根据年月获取每天每一小时的开始和下一小时开始时间
*
* @param year 年
* @param month 月
* @return Map<String, String> 小时开始<=date<下一小时的开始
*/
public static Map<String, String> getHoursByDay(int year, int month) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar c = Calendar.getInstance();
c.set(year, month, 0);
//int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
int days = c.get(DAY_OF_MONTH);
Map<String, String> dayHours = new TreeMap<>();
for (int day = 1; day <= days; day++) {
c.set(DAY_OF_MONTH, day);
for (int hour = 0; hour <= 23; hour++) {
c.set(Calendar.HOUR_OF_DAY, hour);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
String beginHour = sdf.format(c.getTime());
c.add(Calendar.HOUR, 1);
// c.set(Calendar.MINUTE, 59);
// c.set(Calendar.SECOND, 59);
// c.set(Calendar.MILLISECOND, 999);
String endHour = sdf.format(c.getTime());
dayHours.put(beginHour, endHour);
}
}
return dayHours;
}
public static void main(String[] args) {
getHoursByDay(2021, 6).forEach((k, v) -> {
System.out.println(k + " " + v);
});
}
}
获取每天或每小时的开始时间和结束时间(即小于下一开始时间)工具类
于 2022-11-04 23:18:03 首次发布