DateUtil日期工具类

/**
 * 日期工具类(使用了ThreadLocal获取SimpleDateFormat,其他方法可以直接拷贝common-lang)
 */
public class DateUtil {
    private static SimpleDateFormat sdfShot = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
    private static Map<String, ThreadLocal<SimpleDateFormat>> sdfMap = new HashMap<String, ThreadLocal<SimpleDateFormat>>();

    private static Logger logger = LoggerFactory.getLogger(DateUtil.class);

    public final static String MDHMSS = "MMddHHmmssSSS";
    public final static String YMDHMS = "yyyyMMddHHmmss";
    public final static String YMDHMS_ = "yyyy-MM-dd HH:mm:ss";
    public final static String YMD = "yyyyMMdd";
    public final static String YMD_ = "yyyy-MM-dd";
    public final static String HMS = "HHmmss";


    public static DateBeginAndEnd getYearBeginAndEnd(String year ,boolean isNow){
        DateBeginAndEnd dateBeginAndEnd = new DateBeginAndEnd();
        dateBeginAndEnd.setBeginDate(year+"-01-01");
        dateBeginAndEnd.setEndDate(year+"-12-31");

        if(isNow){
            dateBeginAndEnd.setEndDate(DateUtils.getDate());
        }
        return dateBeginAndEnd;
    }


    public static DateBeginAndEnd getMonthBeginAndEnd(String month ){
        String dataStr = month + "-01";
        Date date = DateUtils.dateParse(dataStr, "yyyy-MM-dd");
        Map<String, String> map= getFirstdayCurrentMonth(date);
        DateBeginAndEnd dateBeginAndEnd = new DateBeginAndEnd();
        dateBeginAndEnd.setBeginDate(map.get("first"));
        dateBeginAndEnd.setEndDate(map.get("last"));
        return dateBeginAndEnd;
    }


    public static Map<String, String> getFirstdayCurrentMonth(Date date) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        //calendar.add(Calendar.MONTH, -1);
        //calendar.add(Calendar.MONTH, -10);
        Date theDate = calendar.getTime();

        //上个月第一天
        GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance();
        gcLast.setTime(theDate);
        gcLast.set(Calendar.DAY_OF_MONTH, 1);
        String day_first = df.format(gcLast.getTime());
        StringBuffer str = new StringBuffer().append(day_first);
        day_first = str.toString();

        //上个月最后一天
        calendar.add(Calendar.MONTH, 1);    //加一个月
        calendar.set(Calendar.DATE, 1);        //设置为该月第一天
        calendar.add(Calendar.DATE, -1);    //再减一天即为上个月最后一天
        String day_last = df.format(calendar.getTime());
        StringBuffer endStr = new StringBuffer().append(day_last);
        day_last = endStr.toString();
        Map<String, String> map = new HashMap<String, String>();
        map.put("first", day_first);
        map.put("last", day_last);
        return map;
    }







    /**
     * 获取一个月的同比月
     *
     * @param month
     * @return
     */
    public static String getTbStringMonth(String month) {
        String dataStr = month + "-01";
        Date date = DateUtils.dateParse(dataStr, "yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.YEAR, -1);
        Date date2 = calendar.getTime();
        return DateUtils.parseDateToStr("yyyy-MM", date2);

    }

    /**
     * 获取一个月的环比比月
     *
     * @param month
     * @return
     */
    public static String getHbStringMonth(String month) {
        String dataStr = month + "-01";
        Date date = DateUtils.dateParse(dataStr, "yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, -1);
        Date date2 = calendar.getTime();
        return DateUtils.parseDateToStr("yyyy-MM", date2);

    }

    public static String getTbYear(String year) {
        Integer yearNum = Integer.parseInt(year);
        yearNum = yearNum - 1;
        return yearNum.toString();
    }

    /**
     * 根据map中的key得到对应线程的sdf实例
     *
     * @param pattern map中的key
     * @return 该实例
     */
    private static SimpleDateFormat getSdf(final String pattern) {
        ThreadLocal<SimpleDateFormat> sdfThread = sdfMap.get(pattern);
        if (sdfThread == null) {
            //双重检验,防止sdfMap被多次put进去值,和双重锁单例原因是一样的
            synchronized (DateUtil.class) {
                sdfThread = sdfMap.get(pattern);
                if (sdfThread == null) {
                    logger.debug("put new sdf of pattern " + pattern + " to map");
                    sdfThread = new ThreadLocal<SimpleDateFormat>() {
                        @Override
                        protected SimpleDateFormat initialValue() {
                            logger.debug("thread: " + Thread.currentThread() + " init pattern: " + pattern);
                            return new SimpleDateFormat(pattern);
                        }
                    };
                    sdfMap.put(pattern, sdfThread);
                }
            }
        }
        return sdfThread.get();
    }

    /**
     * 按照指定pattern解析日期
     *
     * @param date    要解析的date
     * @param pattern 指定格式
     * @return 解析后date实例
     */
    public static Date parseDate(String date, String pattern) {
        if (date == null) {
            throw new IllegalArgumentException("The date must not be null");
        }
        try {
            return getSdf(pattern).parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
            logger.error("解析的格式不支持:" + pattern);
        }
        return null;
    }

    /**
     * 按照指定pattern格式化日期
     *
     * @param date    要格式化的date
     * @param pattern 指定格式
     * @return 解析后格式
     */
    public static String formatDate(Date date, String pattern) {
        if (date == null) {
            throw new IllegalArgumentException("The date must not be null");
        } else {
            return getSdf(pattern).format(date);
        }
    }

    public static Long getNowToNextDaySeconds() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DAY_OF_YEAR, 1);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000;
    }


    public static LocalDate toLocalDate(Date date) {
        Instant instant = date.toInstant();
        ZoneId zone = ZoneId.systemDefault();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
        LocalDate localDate = localDateTime.toLocalDate();
        return localDate;

    }

    public static Date toDate(LocalDate date) {
        //LocalDate date = LocalDate.of(2006,07,26);
        ZoneId zone = ZoneId.systemDefault();
        Instant instant = date.atStartOfDay().atZone(zone).toInstant();
        java.util.Date da = Date.from(instant);

        return da;

    }

    public static String getWeekStart(Date d) {
        TemporalAccessor date = toLocalDate(d);
        TemporalField fieldIso = WeekFields.of(DayOfWeek.MONDAY, 1).dayOfWeek();
        LocalDate localDate = LocalDate.from(date);
        localDate = localDate.with(fieldIso, 1);
        return sdfShot.format(Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()));
    }

    public static String getWeekEnd(Date d) {
        TemporalAccessor date = toLocalDate(d);
        TemporalField fieldIso = WeekFields.of(DayOfWeek.MONDAY, 1).dayOfWeek();
        LocalDate localDate = LocalDate.from(date);
        localDate = localDate.with(fieldIso, 7);
        return sdfShot.format(Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()));
    }

    // 获取本周
    public static CustomWeek getCustomWeekFromBenWeek() throws ParseException {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
        Date date = new Date();
        String beginDateStr = getWeekStart(date);
        String endDateStr = getWeekEnd(date);

        Date beginDate = sdf.parse(beginDateStr);

        Date endDate = sdf.parse(endDateStr);
        if (date.getTime() < endDate.getTime()) {
            endDate = date;
        }
        CustomWeek customWeek = new CustomWeek();
        customWeek.setEndDate(sdf.format(endDate));
        customWeek.setStartDate(sdf.format(beginDate));

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(beginDate);

        List<String> dayList = new ArrayList<>();
        Map<String, String> dayOfWeekMap = new HashMap<>();
        List<Integer> dyaNumList = new ArrayList<>();
        Map<Integer, String> dayNumMap = new HashMap<>();

        for (; calendar.getTime().getTime() <= endDate.getTime(); ) {
            Date dateit = calendar.getTime();
            String dateStrit = sdf.format(dateit);
            int n = calendar.get(Calendar.DAY_OF_WEEK);
            if (n == 1) {
                System.out.println("周日");
                dayOfWeekMap.put(dateStrit, "周日");
                dayList.add("周日");
                dyaNumList.add(1);
                dayNumMap.put(1, "周日");
            }
            if (n == 2) {
                System.out.println("周一");
                dayOfWeekMap.put(dateStrit, "周一");
                dayList.add("周一");
                dyaNumList.add(2);
                dayNumMap.put(2, "周一");
            }
            if (n == 3) {
                System.out.println("周二");
                dayOfWeekMap.put(dateStrit, "周二");
                dayList.add("周二");
                dyaNumList.add(3);
                dayNumMap.put(3, "周二");
            }
            if (n == 4) {
                System.out.println("周三");
                dayOfWeekMap.put(dateStrit, "周三");
                dayList.add("周三");
                dyaNumList.add(4);
                dayNumMap.put(4, "周三");
            }
            if (n == 5) {
                System.out.println("周四");
                dayOfWeekMap.put(dateStrit, "周四");
                dayList.add("周四");
                dyaNumList.add(5);
                dayNumMap.put(5, "周四");
            }
            if (n == 6) {
                System.out.println("周五");
                dayOfWeekMap.put(dateStrit, "周五");
                dayList.add("周五");
                dyaNumList.add(6);
                dayNumMap.put(6, "周五");
            }
            if (n == 7) {
                System.out.println("周六");
                dayOfWeekMap.put(dateStrit, "周六");
                dayList.add("周六");
                dyaNumList.add(7);
                dayNumMap.put(7, "周六");
            }

            calendar.add(Calendar.DAY_OF_YEAR, 1);
        }

        customWeek.setDayOfWeekMap(dayOfWeekMap);
        customWeek.setDayList(dayList);
        customWeek.setDayNumList(dyaNumList);
        customWeek.setDayNumMap(dayNumMap);
        return customWeek;
    }

    //获取本月的周
    public static CustomMonth getCustomMonthFromBenYue() throws ParseException {

        SimpleDateFormat sdf0 = new SimpleDateFormat("yyyy-MM");
        String yearMonth = sdf0.format(new Date());

        CustomMonth customMonth = new CustomMonth();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
        Date startDate = sdf.parse(yearMonth + "-01");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(startDate);
        int n = calendar.get(Calendar.DAY_OF_WEEK);

        int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

        Date endDate = sdf.parse(yearMonth + "-" + lastDay);

        Date curDate = sdf.parse(sdf.format(new Date()));

        if (curDate.getTime() < endDate.getTime()) {
            endDate = curDate;
        }


        if (n == 3) {
            calendar.add(Calendar.DAY_OF_YEAR, -1);
            System.out.println(sdf.format(calendar.getTime()));
        }
        if (n == 4) {
            calendar.add(Calendar.DAY_OF_YEAR, -2);
            System.out.println(sdf.format(calendar.getTime()));
        }
        if (n == 5) {
            calendar.add(Calendar.DAY_OF_YEAR, -3);
            System.out.println(sdf.format(calendar.getTime()));
        }
        if (n == 6) {
            calendar.add(Calendar.DAY_OF_YEAR, -4);
            System.out.println(sdf.format(calendar.getTime()));
        }
        if (n == 7) {
            calendar.add(Calendar.DAY_OF_YEAR, -5);
            System.out.println(sdf.format(calendar.getTime()));
        }
        if (n == 1) { //周日
            calendar.add(Calendar.DAY_OF_YEAR, -6);
            System.out.println(sdf.format(calendar.getTime()));
        }

        startDate = calendar.getTime();
        customMonth.setStartDate(sdf.format(startDate));
        customMonth.setEndDate(sdf.format(endDate));


        Map<String, String> dayWeekMap = new HashMap<>();
        Set<String> weekList = new HashSet<>();
        Set<Integer> weekArray = new HashSet<>();

        List<DateAndWeek> list = new ArrayList<>();
        for (; calendar.getTime().getTime() <= endDate.getTime(); ) {
            Date dateit = calendar.getTime();
            String dateStrit = sdf.format(dateit);
            System.out.println(dateStrit);
            // Long c= (dateit.getTime() -startDate.getTime())/(3600*24*1000*7)+1;
            int c = getWeekOfYearByDate(dateStrit);
            System.out.println(c);
            dayWeekMap.put(dateStrit, "第" + c + "周");
            weekList.add("第" + c + "周");
            weekArray.add(c);

            DateAndWeek dateAndWeek = new DateAndWeek();
            dateAndWeek.setDateStr(dateStrit);
            dateAndWeek.setWeekNum(c);
            list.add(dateAndWeek);
            calendar.add(Calendar.DAY_OF_YEAR, 1);
        }
        customMonth.setDayWeekMap(dayWeekMap);
        List<String> weekList0 = new ArrayList<String>(weekList);
        Collections.sort(weekList0);
        customMonth.setWeekList(weekList0);
        List<Integer> weekArray0 = new ArrayList<Integer>(weekArray);
        Collections.sort(weekArray0);
        customMonth.setWeekArray(weekArray0);


        Map<Integer, DateBeginAndEnd> weekNumDateMap = new HashMap<>();
        weekArray0.forEach(item -> {
            String max = list.stream().filter(it -> it.getWeekNum().equals(item)).max(Comparator.comparing(DateAndWeek::getDateStr)).get().getDateStr();

            String min = list.stream().filter(it -> it.getWeekNum().equals(item)).max(Comparator.comparing(DateAndWeek::getDateStr)).get().getDateStr();

            DateBeginAndEnd dateBeginAndEnd = new DateBeginAndEnd();
            dateBeginAndEnd.setBeginDate(min);
            dateBeginAndEnd.setEndDate(max);
            weekNumDateMap.put(item,dateBeginAndEnd);

        });

        customMonth.setWeekNumDateMap(weekNumDateMap);



        return customMonth;
    }

    /**
     * 两个日期之间的周
     *
     * @param beginDateStr
     * @param endDateStr
     * @return
     * @throws ParseException
     */
    public static CustomMonth getWeekBetweenBeginAndEnd(String beginDateStr, String endDateStr) throws ParseException {
        CustomMonth customMonth = new CustomMonth();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
        Date beginDate = sdf.parse(beginDateStr);
        Date endDate = sdf.parse(endDateStr);
        customMonth.setStartDate(sdf.format(beginDate));
        customMonth.setEndDate(sdf.format(endDate));
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(beginDate);


        Map<String, String> dayWeekMap = new HashMap<>();
        Set<String> weekList = new HashSet<>();
        Set<Integer> weekArray = new HashSet<>();

        List<DateAndWeek> list = new ArrayList<>();
        for (; calendar.getTime().getTime() <= endDate.getTime(); ) {
            Date dateit = calendar.getTime();
            String dateStrit = sdf.format(dateit);
            System.out.println(dateStrit);
            // Long c= (dateit.getTime() -startDate.getTime())/(3600*24*1000*7)+1;
            int c = getWeekOfYearByDate(dateStrit);
            System.out.println(c);
            dayWeekMap.put(dateStrit, "第" + c + "周");
            weekList.add("第" + c + "周");
            weekArray.add(c);
            DateAndWeek dateAndWeek = new DateAndWeek();
            dateAndWeek.setDateStr(dateStrit);
            dateAndWeek.setWeekNum(c);
            list.add(dateAndWeek);

            calendar.add(Calendar.DAY_OF_YEAR, 1);
        }
        customMonth.setDayWeekMap(dayWeekMap);

        List<String> weekList0 = new ArrayList<String>(weekList);
        Collections.sort(weekList0);

        customMonth.setWeekList(weekList0);


        List<Integer> weekArray0 = new ArrayList<Integer>(weekArray);
        Collections.sort(weekArray0);

        customMonth.setWeekArray(weekArray0);

        Map<Integer, DateBeginAndEnd> weekNumDateMap = new HashMap<>();
        weekArray0.forEach(item -> {
            String max = list.stream().filter(it -> it.getWeekNum().equals(item)).max(Comparator.comparing(DateAndWeek::getDateStr)).get().getDateStr();

            String min = list.stream().filter(it -> it.getWeekNum().equals(item)).min(Comparator.comparing(DateAndWeek::getDateStr)).get().getDateStr();

            DateBeginAndEnd dateBeginAndEnd = new DateBeginAndEnd();
            dateBeginAndEnd.setBeginDate(min);
            dateBeginAndEnd.setEndDate(max);
            weekNumDateMap.put(item,dateBeginAndEnd);

        });

        customMonth.setWeekNumDateMap(weekNumDateMap);
        return customMonth;
    }


    /**
     * 两个日期之间的月
     *
     * @param beginDateStr
     * @param endDateStr
     * @return
     * @throws ParseException
     */
    public static CustomYear getYearMonthFromBeginAndEnd(String beginDateStr, String endDateStr) throws ParseException {
        CustomYear customYear = new CustomYear();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
        Date beginDate = sdf.parse(beginDateStr);
        Date endDate = sdf.parse(endDateStr);


        List<String> monthList = new ArrayList<>();
        SimpleDateFormat sdfy = new SimpleDateFormat("yyyy-MM");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(beginDate);
        for (; calendar.getTime().getTime() <= endDate.getTime(); ) {
            String ym = sdfy.format(calendar.getTime());
            monthList.add(ym);
            calendar.add(Calendar.MONTH, 1);
        }

        customYear.setBeginDate(sdf.format(beginDate));
        customYear.setEndDate(sdf.format(endDate));
        customYear.setMonthList(monthList);

        return customYear;
    }


    /**
     * 两个日期之间的日期
     *
     * @param beginDateStr
     * @param endDateStr
     * @return
     * @throws ParseException
     */
    public static CustomerDate getCustomerDateFromBeginAndEnd(String beginDateStr, String endDateStr) throws ParseException {
        CustomerDate customerDate = new CustomerDate();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
        Date beginDate = sdf.parse(beginDateStr);
        Date endDate = sdf.parse(endDateStr);
        List<String> dateList = new ArrayList<>();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(beginDate);
        for (; calendar.getTime().getTime() <= endDate.getTime(); ) {
            String ym = sdf.format(calendar.getTime());
            dateList.add(ym);
            calendar.add(Calendar.DAY_OF_YEAR, 1);
        }
        customerDate.setStartDate(sdf.format(beginDate));
        customerDate.setEndDate(sdf.format(endDate));
        customerDate.setDateList(dateList);

        return customerDate;
    }


    /**
     * 获取本年的月
     *
     * @return
     * @throws ParseException
     */
    public static CustomYear getYearMonthFromBenYear() throws ParseException {
        CustomYear customYear = new CustomYear();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
        String year = DateUtils.getYYYY();
        String beginDateStr = year + "-" + "01" + "-" + "01";
        String endDateStr = year + "-" + "12" + "-" + "31";
        Date beginDate = sdf.parse(beginDateStr);
        Date endDate = sdf.parse(endDateStr);

        Date curDate = sdf.parse(sdf.format(new Date()));
        if (curDate.getTime() < endDate.getTime()) {
            endDate = curDate;
        }

        List<String> monthList = new ArrayList<>();
        SimpleDateFormat sdfy = new SimpleDateFormat("yyyy-MM");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(beginDate);
        for (; calendar.getTime().getTime() <= endDate.getTime(); ) {
            String ym = sdfy.format(calendar.getTime());
            monthList.add(ym);
            calendar.add(Calendar.MONTH, 1);
        }

        customYear.setBeginDate(sdf.format(beginDate));
        customYear.setEndDate(sdf.format(endDate));
        customYear.setMonthList(monthList);

        return customYear;
    }


    /**
     * 获取两个日期之间的年
     *
     * @return
     * @throws ParseException
     */
    public static List<String> getYearList(String beginDateStr, String endDateStr) throws ParseException {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式

        Date beginDate = sdf.parse(beginDateStr);
        Date endDate = sdf.parse(endDateStr);


        List<String> yearList = new ArrayList<>();
        SimpleDateFormat sdfy = new SimpleDateFormat("yyyy");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(beginDate);
        for (; calendar.getTime().getTime() <= endDate.getTime(); ) {
            String ym = sdfy.format(calendar.getTime());
            yearList.add(ym);
            calendar.add(Calendar.YEAR, 1);
        }


        return yearList;
    }


    public static Integer getWeekOfYearByDate(String dateStr) throws ParseException {
        String yearBeginDate = dateStr.substring(0, 4) + "-01-01";
        Date date0 = sdfShot.parse(yearBeginDate);

        Date date = sdfShot.parse(dateStr);
        int n = getNumOfWeek(date0);
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setTime(date);

        int week = calendar.get(Calendar.WEEK_OF_YEAR);

        if (n != 1) {
            return week - 1;
        } else {
            return week;
        }

    }


    public static Integer getNumOfWeekOld(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setTime(date);
        return calendar.get(Calendar.DAY_OF_WEEK);
    }


    public static Integer getNumOfWeek(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setTime(date);
        int n = calendar.get(Calendar.DAY_OF_WEEK);

        if ((n >= 2) && (n <= 7)) {
            return n - 1;
        } else {
            return 7;
        }
    }

    public static Integer getNumOfWeek(String dateStr) throws ParseException {
        Date date = sdfShot.parse(dateStr);
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setTime(date);
        int n = calendar.get(Calendar.DAY_OF_WEEK);

        if ((n >= 2) && (n <= 7)) {
            return n - 1;
        } else {
            return 7;
        }
    }


    /*
     * @Description  获取当前季度str 如:202001为2020年第一季度
     * @Param []
     * @return java.lang.String
     **/
    public static String getThisQuarter() {
        Calendar now = Calendar.getInstance();
        String quarter = null;
        int year = now.get(Calendar.YEAR);
        int month = now.get(Calendar.MONTH) + 1;
        if (month == 1 || month == 2 || month == 3) {
            quarter = "1";
        } else if (month == 4 || month == 5 || month == 6) {
            quarter = "2";
        } else if (month == 7 || month == 8 || month == 9) {
            quarter = "3";
        } else if (month == 10 || month == 11 || month == 12) {
            quarter = "4";
        }
        return  quarter;
    }






}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值