获取日期的周数及相差天数和日期间的日期

public class DateUtils {

    public static void main(String[] args) {
        System.out.println("相差的天数:"+getDay("2024-2-24","2024-6-24"));
    }
 /**
     * 当前日期格式
     * @param date
     * @param pattern
     * @return
     */
    public static String dateToString(Date date, String pattern) {
        SimpleDateFormat var2 = new SimpleDateFormat(pattern);
        return var2.format(date);
    }

    /**
     * 上周开始时间
     * @return
     */
    public static LocalDateTime lastWeekStartTime() {
        LocalDate lastWeek = LocalDate.now().minus(1L, ChronoUnit.WEEKS);
        return LocalDateTime.of(lastWeek.minusDays(lastWeek.getDayOfWeek().getValue() - 1), LocalTime.MIN);
    }

    /**
     * 上周结束时间
     *
     * @return
     */
    public static LocalDateTime lastWeekEndTime() {
        LocalDate lastWeek = LocalDate.now().minus(1L, ChronoUnit.WEEKS);
        return LocalDateTime.of(lastWeek.plusDays(7 - lastWeek.getDayOfWeek().getValue()), LocalTime.MAX);
    }

    /**
     * 上个月的开始时间
     * @return
     */
    public static LocalDateTime lastMonthStartTime() {
        LocalDateTime lastMonth = LocalDateTime.now().minus(1L, ChronoUnit.MONTHS);
        return lastMonth.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
    }

    /**
     * 上个月的结束时间
     * @return
     */
    public static LocalDateTime lastMonthEndTime() {
        LocalDateTime lastMonth = LocalDateTime.now().minus(1L, ChronoUnit.MONTHS);
        return lastMonth.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX);
    }

    public static Date getYearStartDate(Date beginDate, String type){
        Calendar cal = Calendar.getInstance();
        cal.setTime(beginDate);
        cal.set(Calendar.MONTH, 1);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        if ("begin".equalsIgnoreCase(type)){
            cal.set(Calendar.HOUR_OF_DAY, 0);
            cal.set(Calendar.MINUTE, 0);
            cal.set(Calendar.SECOND, 0);
            cal.set(Calendar.MILLISECOND, 0);
        } else if ("end".equalsIgnoreCase(type)){
            cal.set(Calendar.HOUR_OF_DAY, 23);
            cal.set(Calendar.MINUTE, 59);
            cal.set(Calendar.SECOND, 59);
            cal.set(Calendar.MILLISECOND, 59);
        }
        return cal.getTime();
    }

    /**
     * 获取上月的月份
     * @return
     */
    public static LocalDate lastMonth() {
        LocalDate lastMonth = LocalDate.now().plusMonths(-1);
        return lastMonth;
    }

    /**
     * 获取当前第几周
     * @return
     */
    public static String getWeek(){
        // 获取当前日期
        Date currentDate = new Date();
        // 创建一个Calendar实例
        Calendar calendar = Calendar.getInstance();
        // 将日期设置为当年的第一天
        calendar.set(Calendar.DAY_OF_YEAR, 1);
        // 获取星期几(1表示星期日,2表示星期一,以此类推)
        int firstDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        // 将日期设置为当前日期
        calendar.setTime(currentDate);
        // 获取年份
        int year = calendar.get(Calendar.YEAR);
        // 获取一年中的第几天
        int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
        // 计算当前日期是第几周
        int currentWeek = (dayOfYear + (firstDayOfWeek - 1)) / 7 + 1;
        if(currentWeek<2){
            return year+"年第1周";
        }else{
            // 输出结果
            System.out.println(year+"年第" + currentWeek + "周");
            return year+"年第" + (currentWeek-1) + "周";
        }
    }

    //获取相差天数
    public static int getDay(String star,String end){
        String[] star1=star.split("-");
        String[] end1=end.split("-");
        int days=0;
        if(Integer.parseInt(star1[0])<Integer.parseInt(end1[0])){
            for(int i=Integer.parseInt(star1[0]);i<Integer.parseInt(end1[0]);i++){
                //计算是否是瑞年
                if(i%4==0&&i%100!=0||i%400==0){
                    days+=366;
                }else{
                    days+=365;
                }
            }
        }
        //得到开始那一年已过去的日期
        int starday=days(star1[0],star1[1],star1[2]);
        //得到结束那一年已过去的日期
        int endday=days(end1[0],end1[1],end1[2]);
        //减去开始那一年已过去的日期,加上结束那一年已过去的日期
        days=days-starday+endday;
        return days;
    }

    //获取天数
    public static int days(String year,String month,String day){
        int days=0;
        int nowyear=Integer.parseInt(year);
        int[] monthday={0,31,28,31,30,31,30,31,31,30,31,30,31};
        int[] monthday1={0,31,29,31,30,31,30,31,31,30,31,30,31};
        boolean flag=true;
        if(nowyear%4==0&&nowyear%100!=0||nowyear%400==0){
        }else{
            flag=false;
        }
        for(int i=0;i<Integer.parseInt(month);i++){
            if(flag){
                days+=monthday1[i];
            }else{
                days+=monthday[i];
            }
        }
        days+=Integer.parseInt(day);
        return days;
    }

    /**
     * 获得近一年的开始时间和结束时间
     * @return
     */
    public static Map getYearTRange(){
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Map condition=new LinkedHashMap();
        Calendar calendar = Calendar.getInstance();
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
        calendar.set(Calendar.HOUR_OF_DAY,24);
        condition.put("endDate",df.format(calendar.getTime()));
        calendar.set(Calendar.HOUR_OF_DAY,-8640);
        condition.put("startDate",df.format(calendar.getTime()));
        return condition;
    }

    /**
     * 获取某个时间段内所有日期
     * @param begin
     * @param end
     * @return
     */
    public static List<String> getDayBetweenDates(String begin, String end) {
        Date dBegin = parse(begin);
        Date dEnd = parse(end);
        List<String> lDate = new ArrayList<String>();
        SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM");
        lDate.add(sd.format(dBegin));
        Calendar calBegin = Calendar.getInstance();
        // 使用给定的 Date 设置此 Calendar 的时间
        calBegin.setTime(dBegin);
        Calendar calEnd = Calendar.getInstance();
        // 使用给定的 Date 设置此 Calendar 的时间
        calEnd.setTime(dEnd);
        // 测试此日期是否在指定日期之后
        while (dEnd.after(calBegin.getTime())) {
            // 根据日历的规则,为给定的日历字段添加或减去指定的时间量
            calBegin.add(Calendar.DAY_OF_MONTH, 1);
            if(!lDate.contains(sd.format(calBegin.getTime()))){
                lDate.add(sd.format(calBegin.getTime()));
            }
        }
        if(CollectionUtils.isNotEmpty(lDate)){
            lDate.remove(0);
        }
        return lDate;
    }

    /**
     * 日期解析
     * @param date
     * @return
     */
    public static Date parse(String date) {
        try {
            return new SimpleDateFormat("yyyy-MM").parse(date);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
 }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值