001package top.cenze.utils;
002
003import cn.hutool.core.util.ObjectUtil;
004
005import java.util.Calendar;
006import java.util.Date;
007
008/**
009 * @desc: 日期转换
010 * https://blog.csdn.net/chengxuyuan_110/article/details/81183922
011 * @author: chengze
012 * @createByDate: 2023/11/14 11:07
013 */
014public class DateUtil extends cn.hutool.core.date.DateUtil {
015
016    /**
017     * get first date of given month and year
018     * @param year
019     * @param month
020     * @return
021     */
022    public static String getFirstDayOfMonth(int year, int month){
023        String monthStr = month < 10 ? "0" + month : String.valueOf(month);
024        return year + "-"+monthStr+"-" +"01";
025    }
026
027    /**
028     * get the last date of given month and year
029     * @param year
030     * @param month
031     * @return
032     */
033    public static String getLastDayOfMonth(int year, int month){
034        Calendar calendar = Calendar.getInstance();
035        calendar.set(Calendar.YEAR , year);
036        calendar.set(Calendar.MONTH , month - 1);
037        calendar.set(Calendar.DATE , 1);
038        calendar.add(Calendar.MONTH, 1);
039        calendar.add(Calendar.DAY_OF_YEAR , -1);
040        return calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" +
041                calendar.get(Calendar.DAY_OF_MONTH);
042    }
043
044    /**
045     * get Calendar of given year
046     * @param year
047     * @return
048     */
049    public static Calendar getCalendarFormYear(int year){
050        Calendar cal = Calendar.getInstance();
051        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
052        cal.set(Calendar.YEAR, year);
053        return cal;
054    }
055
056    /**
057     * 获取指定年份(如:2023),指定周号(如果:第30周)起始日期
058     * get start date of given week no of a year
059     * @param year
060     * @param weekNo
061     * @return      yyyy-MM-dd
062     */
063    public static String getStartDayOfWeekNo(int year, int weekNo){
064        Calendar cal = getCalendarFormYear(year);
065        cal.set(Calendar.WEEK_OF_YEAR, weekNo);
066        return cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" +
067                cal.get(Calendar.DAY_OF_MONTH);
068
069    }
070
071    /**
072     * 获取指定年份(如:2023),指定周号(如果:第30周)截止日期
073     * get the end day of given week no of a year.
074     * @param year
075     * @param weekNo
076     * @return      yyyy-MM-dd
077     */
078    public static String getEndDayOfWeekNo(int year, int weekNo){
079        Calendar cal = getCalendarFormYear(year);
080        cal.set(Calendar.WEEK_OF_YEAR, weekNo);
081        cal.add(Calendar.DAY_OF_WEEK, 6);
082        return cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" +
083                cal.get(Calendar.DAY_OF_MONTH);
084    }
085
086    public static Date calendar2Date(Calendar calendar) {
087        if (ObjectUtil.isNull(calendar)) {
088            return null;
089        }
090
091        return calendar.getTime();
092    }
093
094    public static Calendar date2Calendar(Date date) {
095        if (ObjectUtil.isNull(date)) {
096            return null;
097        }
098
099        Calendar calendar = Calendar.getInstance();
100        calendar.setTime(date);
101
102        return calendar;
103    }
104}