目录
9. 根据日期获取一周的日期列表
public static void main(String[] args) throws Exception{
String dateStr = "2023-9-4";
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = dateFormat.parse(dateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
List<Date> weekDateList = getWeekDateListByNowDate(calendar.getTime());
//获取到的一周日期列表
for (Date tempDate : weekDateList) {
System.out.println(dateFormat.format(tempDate));
}
}
/**获取一周列表
* @param nowDate 这个时间内的一周(为空取当前时间)
* @return list
*/
private static List<Date> getWeekDateListByNowDate(Date nowDate) {
List<Date> weekDateList = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
if (nowDate != null) {
calendar.setTime(nowDate);
}
weekDateList.add(calendar.getTime());
List<Date> subtractDateList;
List<Date> addDateList;
switch (calendar.get(Calendar.DAY_OF_WEEK)) {
case 2:
// weekStr = "星期一";
addDateList = getAddDateList(1, 6, calendar.getTime());
subtractDateList = getSubtractDateList(1,0, calendar.getTime());
break;
case 3:
// weekStr = "星期二";
addDateList = getAddDateList(1, 5, calendar.getTime());
subtractDateList = getSubtractDateList(1,1, calendar.getTime());
break;
case 4:
// weekStr = "星期三";
addDateList = getAddDateList(1, 4, calendar.getTime());
subtractDateList = getSubtractDateList(1,2, calendar.getTime());
break;
case 5:
// weekStr = "星期四";
addDateList = getAddDateList(1, 3, calendar.getTime());
subtractDateList = getSubtractDateList(1,3, calendar.getTime());
break;
case 6:
// weekStr = "星期五";
addDateList = getAddDateList(1, 2, calendar.getTime());
subtractDateList = getSubtractDateList(1,4, calendar.getTime());
break;
case 7:
// weekStr = "星期六";
addDateList = getAddDateList(1, 1, calendar.getTime());
subtractDateList = getSubtractDateList(1,5, calendar.getTime());
break;
case 1:
//1 是星期日,如果是星期日的话说明是本周最后一天,日期时间往回移
// weekStr = "星期日";
addDateList = getAddDateList(1, 0, calendar.getTime());
subtractDateList = getSubtractDateList(1, 6, calendar.getTime());
break;
default:
addDateList = new ArrayList<>();
subtractDateList = new ArrayList<>();
}
weekDateList.addAll(addDateList);
weekDateList.addAll(subtractDateList);
//对结果进行排序, 按请specialName升序
Collections.sort(weekDateList, new Comparator<Date>() {
@Override
public int compare(Date s1, Date s2) {
return s1.compareTo(s2);
}
});
return weekDateList;
}
/**加上天数,获取列表*/
private static List<Date> getAddDateList(int beginIndex, int endIndex, Date date) {
List<Date> dateList = new ArrayList<>();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("=====计算加上天数,当前日期:" + dateFormat.format(date));
if (endIndex > beginIndex) {
Calendar calendar = Calendar.getInstance();
for (int i = beginIndex; i <= endIndex; i++) {
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_YEAR, i);
dateList.add(calendar.getTime());
System.out.println("===加上" + i + "天,的日期:" + dateFormat.format(calendar.getTime()));
}
}
return dateList;
}
/**减去天数,获取列表*/
private static List<Date> getSubtractDateList(int beginIndex, int endIndex, Date date) {
List<Date> dateList = new ArrayList<>();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("=====计算减去天数,当前日期:" + dateFormat.format(date));
if (endIndex > beginIndex) {
Calendar calendar = Calendar.getInstance();
for (int i = endIndex; i >= beginIndex; i--) {
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_YEAR, -i);
dateList.add(calendar.getTime());
System.out.println("===减去" + i + "天,的日期:" + dateFormat.format(calendar.getTime()));
}
}
return dateList;
}
8.Calender获取星期几
public static void main(String[] args) throws Exception{
String dateStr = "2023-8-20";
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = dateFormat.parse(dateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
//星期日是第一天,1
System.out.println("今天是星期:" + calendar.get(Calendar.DAY_OF_WEEK));
}
7.Calender设置年月日时分秒
public static void main(String[] args) {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
System.out.println("之前");
System.out.println(dateFormat.format(calendar.getTime()));
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DATE);
Calendar resultCalendar = Calendar.getInstance();
resultCalendar.set(Calendar.YEAR, year);//年
resultCalendar.set(Calendar.MONTH, month);//月(月份0代表1月)
resultCalendar.set(Calendar.DATE, day);//日
resultCalendar.set(Calendar.HOUR_OF_DAY, 23);//时
resultCalendar.set(Calendar.MINUTE, 59);//分
resultCalendar.set(Calendar.SECOND, 59);//秒
System.out.println("之后");
System.out.println(dateFormat.format(resultCalendar.getTime()));
}
6.计算两个日期相差的天数
/**
* 传入两个日期,计算相差的天数
*
* return int 相隔的天数, 如2018-01-01 - 2018-01-02 这样计算成两天
* */
public static int getBeginTimeToEndTimeDays (Date beginDate, Date endDate) {
if (beginDate.getTime() > endDate.getTime()) {
throw new BusinessException("开始时间不能大于结束时间");
}
Calendar cal1 = Calendar.getInstance();
cal1.setTime(beginDate);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(endDate);
int day1= cal1.get(Calendar.DAY_OF_YEAR);
int day2 = cal2.get(Calendar.DAY_OF_YEAR);
int year1 = cal1.get(Calendar.YEAR);
int year2 = cal2.get(Calendar.YEAR);
if(year1 != year2)
{
int timeDistance = 0 ;
for(int i = year1 ; i < year2 ; i ++)
{
if(i%4==0 && i%100!=0 || i%400==0)
{
timeDistance += 366;
}
else //不是闰年
{
timeDistance += 365;
}
}
return timeDistance + (day2-day1) + 1;
}
else //不同年
{
System.out.println("判断day2 - day1 : " + (day2-day1));
return day2-day1+1;
}
}
5.返回一个月的日期列表
/**
* 获取一个月的日期列表
*/
private List<Date> getMonthDateList (Integer year, Integer month) {
List<Date> monthDateList = new ArrayList<>();
//构造本月的开始日期
Calendar thisMonthFirst = Calendar.getInstance();
thisMonthFirst.set(year, month-1, 1);
//构造本月的结束日期
Calendar thisMonthLast = Calendar.getInstance();
thisMonthLast.setTime(thisMonthFirst.getTime());
thisMonthLast.set( Calendar.DAY_OF_MONTH, thisMonthFirst.getActualMaximum(Calendar.DAY_OF_MONTH) );
int monthBeginInr = thisMonthFirst.get(Calendar.DAY_OF_MONTH);
int monthEndInr = thisMonthLast.get(Calendar.DAY_OF_MONTH);
Calendar nowDate = Calendar.getInstance();
for (int i=monthBeginInr; i<=monthEndInr; i++) {
nowDate.set(year, month-1, i);
monthDateList.add(nowDate.getTime());
}
return monthDateList;
}
1.获取两个时间段之间的所有时间
/**
* 获取两个时间段之间的所有时间
*
* @param beginDate 开始时间
* @param endDate 结束时间
*
* @return dateList
*/
private static List<Date> getBeginToEndDateList(Date beginDate, Date endDate) {
List<Date> dateList = new ArrayList<>();
Calendar beginCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
beginCalendar.setTime(beginDate);
endCalendar.setTime(endDate);
//计算两个日期相差的天数
int aa = DateUtil.getBeginTimeToEndTimeDays(beginDate, endDate);
for (int i=0; i<aa; i++) {
dateList.add(beginCalendar.getTime());
beginCalendar.add(Calendar.DAY_OF_YEAR, 1);
}
return dateList;
}
2.获取两个时间相差的月份数
/**
* 判断两个日期相差几个月
* */
private static int getBeginToEndDateMonth(Date beginDate, Date endDate) {
int result;
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
startCalendar.setTime(beginDate);
endCalendar.setTime(endDate);
//判断日期大小
if(startCalendar.after(endCalendar)){
Calendar temp = startCalendar;
startCalendar = endCalendar;
endCalendar = temp;
}
int startYear = startCalendar.get(Calendar.YEAR);
int endYear = endCalendar.get(Calendar.YEAR);
int startMonth = startCalendar.get(Calendar.MONTH);
int endMonth = endCalendar.get(Calendar.MONTH);
result = (endYear - startYear)*12+(endMonth-startMonth);
return result;
}
3.传入一个时间,返回这个月的开始和结束时间
/**
* 传入一个时间,返回这个月的开始和结束时间
* */
public static Map<String, Date> getThisMonthBeginAndEndDate(Date nowDate) {
Map<String, Date> dateMap = new HashMap<>(2);
Calendar calendar = Calendar.getInstance();
calendar.setTime(nowDate);
//构造本月的开始日期
Calendar thisMonthFirst = Calendar.getInstance();
thisMonthFirst.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), 1);
//构造本月的结束日期
Calendar thisMonthLast = Calendar.getInstance();
thisMonthLast.setTime(thisMonthFirst.getTime());
thisMonthLast.set( Calendar.DAY_OF_MONTH, thisMonthFirst.getActualMaximum(Calendar.DAY_OF_MONTH) );
dateMap.put("beginDate", thisMonthFirst.getTime());
dateMap.put("endDate", thisMonthLast.getTime());
return dateMap;
}
4.使用Calendar月份加1
public static void main(String[] args) throws Exception{
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String dateToString = "2019-11-2";
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateFormat.parse(dateToString));
for (int i=0; i<30; i++) {
calendar.add(Calendar.MONTH, +1);
System.out.println("=========>当前时间: " + dateFormat.format(calendar.getTime()));
}
}