日期转换格式工具、String、Date格式互转

日期转换格式工具

package com.xxxxx.smartcity.gov.fgw.meeting.utils;

import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.Objects;

/**
 * @author WANGHONGWEI319
 * @date 2019/8/16 18:13
 */
public final class DateUtil {

    private final static String YEAR_MONTH_DAY = "yyyyMMdd";

    private final static String QUARTER_FIRST = "Q1";

    private final static String QUARTER_SECOND = "Q2";

    private final static String QUARTER_THIRD = "Q3";

    private final static String QUARTER_FOURTH = "Q4";

    private DateUtil() {

    }

    /**
     * 判断传入日期是否为本季度
     *
     * @param date
     * @return
     */
    public static Boolean inCurrentQuarter(Date date) {
        if (null == date) {
            return false;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int year = calendar.get(Calendar.YEAR);
        LocalDate now = LocalDate.now();
        if (now.getYear() != year) {
            return false;
        }
        LocalDate localDate = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).toLocalDate();
        int i = localDate.getMonthValue() - now.getMonth().firstMonthOfQuarter().getValue();
        return i <= 2 && i >= 0;
    }

    /**
     * 获取指定日期前后一段时间日期
     *
     * @param date
     * @param day
     * @param calendarType
     * @return
     */
    public static Date getDateBefore(Date date, int day, int calendarType) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(calendarType, -day);
        return calendar.getTime();
    }

    /**
     * 比较日期相等
     *
     * @param date1
     * @param date2
     * @return
     */
    public static int dateCompare(Date date1, Date date2) {

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date dateFirst = null;
        try {
            dateFirst = dateFormat.parse(dateFormat.format(date1));
            Date dateLast = dateFormat.parse(dateFormat.format(date2));

            if (dateFirst.after(dateLast)) {
                return 1;
            } else if (dateFirst.before(dateLast)) {
                return -1;
            }
            return 0;
        } catch (ParseException e) {
            return 0;
        }
    }

    /**
     * 获取当前时间
     *
     * @return
     */
    public static Date getCurrentDate() {

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            return dateFormat.parse(dateFormat.format(new Date()));
        } catch (ParseException e) {
            return null;
        }
    }

    /**
     * 获取当前时间串
     *
     * @return
     */
    public static String getCurrentDateStr(String pattern) {
        SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
        return dateFormat.format(new Date());
    }

    /**
     * 获取指定时间串
     *
     * @return
     */
    public static String getDateStr(Date date,String pattern) {
        if (ObjectUtils.isEmpty(date)){
            return "";
        }
        SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
        return dateFormat.format(date);
    }

    /**
     * @param date
     * @return
     */
    public static Date dateFormat(Date date) {

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date dateFirst = null;
        try {
            dateFirst = dateFormat.parse(dateFormat.format(date));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return dateFirst;

    }

    /**
     * @param dateStr
     * @return
     */
    public static Date dateParse(String dateStr) {

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date dateFirst = null;
        try {
            dateFirst = dateFormat.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return dateFirst;
    }

	/**
	 * date转String
	 * @param dateStr
	 * @return
	 */
	public static String dateParse2(Date dateStr) {

    	SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    		String dateFirst = null;
   		 try {
     		   dateFirst = dateFormat.format(dateStr);
   		 } catch (Exception e) {
     		   e.printStackTrace();
  		  }
 		   return dateFirst;
		}

    /**
     * 得到日期字符串 默认格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E"
     */
    public static String formatDate(Date date, Object... pattern) {
        String formatDate = null;
        if (pattern != null && pattern.length > 0) {
            formatDate = DateFormatUtils.format(date, pattern[0].toString());
        } else {
            formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");
        }
        return formatDate;
    }

    /**
     * 将日期格式字符串转化为指定格式的日期
     *
     * @param timeStr - 日期字符串
     * @param format  - 具体格式,传空则默认为"yyyy-MM-dd"
     * @return
     */
    public static Date str2Date(String timeStr, String format) {
        if (null == format || format.isEmpty()) {
            format = "yyyy-MM-dd";
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        Date date = null;
        try {
            date = sdf.parse(timeStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 获取当月第一天
     *
     * @param year
     * @param month
     * @return
     */
    public static String getFirstDayOfMonth(int year, int month) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month - 1);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
    }

    /**
     * 获取当月最后一天
     *
     * @param year
     * @param month
     * @return
     */
    public static String getLastDayOfMonth(int year, int month) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month - 1);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DATE));
        return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
    }

    /**
     * 设置时间
     *
     * @param year
     * @param month
     * @param day
     * @return
     */
    public static String setDate(int year, int month, int day) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month - 1);
        cal.set(Calendar.DAY_OF_MONTH, day);
        return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
    }

    /**
     * 取上一年
     *
     * @param year 年份,格式yyyy
     * @return 年份,格式yyyy
     */
    public static String getPreYear(String year) {
        if (StringUtils.isBlank(year) || year.length() != 4 || !StringUtils.isNumericSpace(year)) {
            return null;
        }
        return StringUtils.leftPad(String.valueOf(Integer.parseInt(year) - 1), 4, "0");
    }

    /**
     * 取上几个月
     *
     * @param date,       格式yyyyMMdd
     * @param preFew,上几个月
     * @return 月份,格式yyyyMMdd
     */
    public static String getPreFewMonth(String date, int preFew) {
        if (StringUtils.isBlank(date) || date.length() != 8) {
            return null;
        }
        LocalDate localDate = LocalDate.parse(date, DateTimeFormatter.ofPattern(YEAR_MONTH_DAY));
        return DateTimeFormatter.ofPattern(YEAR_MONTH_DAY).format(localDate.minusMonths(preFew));
    }

    public static String convertDate2Quarter(LocalDate localDate) {
        return convertDate2Quarter(localDate, null);
    }

    public static String convertDate2Quarter(LocalDate localDate, String splitStr) {
        String quarter = null;
        switch (localDate.getMonth()) {
            case MARCH:
                quarter = QUARTER_FIRST;
                break;
            case JUNE:
                quarter = QUARTER_SECOND;
                break;
            case SEPTEMBER:
                quarter = QUARTER_THIRD;
                break;
            case DECEMBER:
                quarter = QUARTER_FOURTH;
                break;
        }
        if (Objects.isNull(splitStr)) {
            splitStr = "";
        }
        return Objects.nonNull(quarter) ?
                StringUtils.leftPad(localDate.getYear() + splitStr + quarter, 6 + splitStr.length(), "0") : null;
    }

    /**
     * 转换季度
     *
     * @param date
     * @return
     */
    public static String convertDate2Quarter(String date) {
        return convertDate2Quarter(date, null);
    }

    /**
     * 转换季度
     *
     * @param date
     * @return
     */
    public static String convertDate2Quarter(String date, String splitStr) {
        if (StringUtils.isBlank(date) || date.length() != 8) {
            return null;
        }
        LocalDate localDate = LocalDate.parse(date, DateTimeFormatter.ofPattern(YEAR_MONTH_DAY));
        return convertDate2Quarter(localDate, splitStr);
    }

    public static String convertQuarter2Date(String quarter, String splitStr) {
        if (StringUtils.isBlank(quarter) || quarter.length() < 6) {
            return null;
        }
        String yearValue = quarter.substring(0, 4);
        int splitLen = Objects.nonNull(splitStr) ? splitStr.length() : 0;
        String quarterValue = quarter.substring(4 + splitLen);
        String monthValue = null;
        switch (quarterValue) {
            case QUARTER_FIRST:
                monthValue = "0" + Month.MARCH.getValue();
                break;
            case QUARTER_SECOND:
                monthValue = "0" + Month.JUNE.getValue();
                break;
            case QUARTER_THIRD:
                monthValue = "0" + Month.SEPTEMBER.getValue();
                break;
            case QUARTER_FOURTH:
                monthValue = "" + Month.DECEMBER.getValue();
                break;
        }
        return Objects.nonNull(monthValue) ? StringUtils.leftPad(yearValue + monthValue + "01", 8, "0") : null;
    }

    public static LocalDate convertQuarterDate(LocalDate localDate) {
        int monthValue = localDate.getMonthValue();
        if (monthValue <= 3) {
            return localDate.withMonth(Month.MARCH.getValue()).withDayOfMonth(1);
        } else if (monthValue <= 6) {
            return localDate.withMonth(Month.JUNE.getValue()).withDayOfMonth(1);
        } else if (monthValue <= 9) {
            return localDate.withMonth(Month.SEPTEMBER.getValue()).withDayOfMonth(1);
        } else {
            return localDate.withMonth(Month.DECEMBER.getValue()).withDayOfMonth(1);
        }
    }

    /**
     * 转换月份
     *
     * @param date
     * @return
     */
    public static String convertDate2Month(String date) {
        if (StringUtils.isBlank(date) || date.length() != 8) {
            return null;
        }
        LocalDate localDate = LocalDate.parse(date, DateTimeFormatter.ofPattern(YEAR_MONTH_DAY));
        return StringUtils.leftPad(String.valueOf(localDate.getMonthValue()), 2, "0");
    }


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值