日期工具类DateUtils

public class DateUtils {
    public static String DATE_FORMATTER = "yyyy-MM-dd";
    public final static String DATE_HOUR_FORMATTER = "yyyy-MM-dd HH";
    public final static String DATE_HOUR_MINUTE_FORMATTER = "yyyy-MM-dd HH:mm";
    public final static String DATE_HOUR_MINUTE_SECOND_FORMATTER = "yyyy-MM-dd HH:mm:ss";
    public final static String YEAR_FORMATTER = "yyyy";
    public final static String MONTH_FORMATTER = "MM";
    public final static String DAY_FORMATTER = "dd";
    public final static String HOUR_FORMATTER = "HH";
    public final static String HOUR_MINUTE_FORMATTER = "HH:mm";

    public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern(DATE_FORMATTER);
    private static final DateTimeFormatter DATE_TIME_HOUR_TIME_FORMATTER = DateTimeFormatter.ofPattern(DATE_HOUR_MINUTE_SECOND_FORMATTER);
    private static final LocalDateTime NOW_TIME = LocalDateTime.now();


    /**
     * 获取系统本地日期
     **/
    public static String getLocalDateNow() {
        return LocalDate.now().format(DATE_TIME_FORMATTER);
    }


    /**
     * 获取LocalDateTime
     **/
    public static LocalDateTime getLocalDateTime() {
        return LocalDateTime.now();
    }

    /**
     * 获取指定时区LocalDateTime
     **/
    public static LocalDateTime getLocalDateTime(ZoneId zon) {
        return LocalDateTime.now(zon);
    }

    /**
     * 获取系统本地日期,指定时区
     **/
    public static String getLocalDateNow(ZoneId zon) {
        LocalDateTime now = LocalDateTime.now(zon);
        return now.format(DATE_TIME_FORMATTER);
    }

    /**
     * 获取系统本地时间
     **/
    public static String getLocalTimeNow() {
        return LocalDateTime.now().format(DATE_TIME_HOUR_TIME_FORMATTER);
    }


    /**
     * 获取系统本地时间,指定时区
     **/
    public static String getLocalTimeNow(ZoneId zon) {
        return LocalDateTime.now(zon).format(DATE_TIME_HOUR_TIME_FORMATTER);
    }

    /**
     * 获取年份
     **/
    public static int getLocalDateYear() {
        return LocalDate.now().getYear();
    }

    /**
     * 获取年份,指定时区
     **/
    public static int getLocalDateYear(ZoneId zon) {
        return LocalDate.now(zon).getYear();
    }

    /**
     * 获取月份
     **/
    public static String getLocalDateMonth() {
        return String.format("%02d", LocalDate.now().getMonthValue());
    }


    /**
     * 获取月份,指定时区
     **/
    public static String getLocalDateMonth(ZoneId zon) {
        return String.format("%02d", LocalDate.now(zon).getMonthValue());
    }

    /**
     * 获取月份中的天
     **/
    public static String getLocalDateDayOfMonth() {
        return String.format("%02d", LocalDate.now().getDayOfMonth());
    }

    /**
     * 获取月份中的天,指定时区
     **/
    public static String getLocalDateDayOfMonth(ZoneId zon) {
        return String.format("%02d", LocalDate.now(zon).getDayOfMonth());
    }

    /**
     * 获取小时
     **/
    public static int getLocalTimeHour() {
        return LocalDateTime.now().getHour();
    }

    /**
     * 获取小时,指定时区
     **/
    public static int getLocalTimeHour(ZoneId zon) {
        return LocalDateTime.now(zon).getHour();
    }

    /**
     * 根据年份,天数获取日期
     **/
    public static String getLocalDate(int year, int dayOfYear) {
        return LocalDate.ofYearDay(year, dayOfYear).format(DATE_TIME_FORMATTER);
    }


    /**
     * LocalDateTime获取UTC时间,参数增加秒数
     **/
    public static String getUTCTimeStr(int seconds) {
        LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
        LocalDateTime nowAddSeconds = now.plusSeconds(seconds);
        return nowAddSeconds.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }

    /**
     * LocalDateTime获取UTC时间DOY
     **/
    public static int getUTCTimeDOY() {
        LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
        return now.getDayOfYear();
    }

    /**
     * LocalDateTime获取UTC时间DOY,增加秒参数
     **/
    public static int getUTCTimeDOY(long seconds) {
        LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
        LocalDateTime nowAddSeconds = now.plusSeconds(seconds);
        return nowAddSeconds.getDayOfYear();
    }

    /**
     * 获取UTC时间年份
     **/
    public static int getUTCTimeYear(long seconds) {
        LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
        LocalDateTime nowAddSeconds = now.plusSeconds(seconds);
        return nowAddSeconds.getYear();
    }


    /**
     * 获取系统本地时间-小时,不可变的日期时间(启动只获取一次最新时间)
     **/
    public static int getLocalHourNow() {
        return NOW_TIME.get(ChronoField.HOUR_OF_DAY);
    }

    /**
     * 获取当前日期时间 格式: yyyy-MM-dd
     */
    public static String getCurrentDate() {
        DateFormat formatter = new SimpleDateFormat(DATE_FORMATTER);
        return formatter.format(new Date());
    }

    /**
     * 获取当前日期时间 格式: yyyy-MM-dd HH:mm:ss
     */
    public static Date getDateTime(String time) {
        try {
            DateFormat format1 = new SimpleDateFormat(DATE_HOUR_MINUTE_SECOND_FORMATTER);
            return format1.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 格式化指定日期 格式:参数 例如 yyyy-MM-dd
     */
    public static String getDate(Date date, String formatStr) {
        SimpleDateFormat format = new SimpleDateFormat(StringUtil.notNull(formatStr, DATE_HOUR_MINUTE_SECOND_FORMATTER));
        return date == null ? "" : format.format(date);
    }

    public static String getDate(long milliSecond) {
        Date date = new Date();
        date.setTime(milliSecond);
        return new SimpleDateFormat().format(date);
    }

    /**
     * 显示当前时间与目标时间的距离
     * <p>
     * **秒前  ** 分钟前  ** 小时前 超过7天显示时间
     */
    public static String distance(Date ctime, String format) {
        if (ctime == null) {
            return "";
        }
        format = com.cnten.commons.StringUtil.notNull(format, "yyyy-MM-dd HH:mm");
        long result = Math.abs(System.currentTimeMillis() - ctime.getTime());
        if (result < 60000) {
            return (result / 1000) + "秒钟前";
        } else if (result < 3600000) {
            return (result / 60000) + "分钟前";
        } else if (result < 86400000) {
            return (result / 3600000) + "小时前";
        } else if (result < 86400000 * 7) {
            return (result / 86400000) + "天前";
        } else {
            return getDate(ctime, format);
        }
    }

    /**
     * 当前时间之前的时间与当前时间相差多少秒
     *
     * @param startDate 当前时间之前的时间
     */
    public static int intervalSecond(Date startDate) {
        long nowDate = System.currentTimeMillis();
        long startDateTime = startDate.getTime();
        return (int) ((nowDate - startDateTime) / 1000);
    }

    /**
     * 计算时间间隔,单位:毫秒
     **/
    public static long intervalSecond(Date startDate, Date endDate) {
        long startDateTime = startDate.getTime();
        long endDateTime = endDate.getTime();
        return endDateTime - startDateTime;
    }

    public static String getDate() {
        Calendar ca = Calendar.getInstance();
        ca.setTime(new Date());
        return getDate(ca.getTime(), YEAR_FORMATTER);
    }

    /**
     * 根据年份、天数获取日期
     **/
    public static String getDate(int year, int dayOfYear) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.DAY_OF_YEAR, dayOfYear);
        return getDate(calendar.getTime(), DATE_FORMATTER);
    }

    public static String getDateYear() {
        Calendar ca = Calendar.getInstance();
        ca.setTime(new Date());
        return getDate(ca.getTime(), YEAR_FORMATTER);
    }

    public static String getDateMonth() {
        Calendar ca = Calendar.getInstance();
        ca.setTime(new Date());
        return getDate(ca.getTime(), MONTH_FORMATTER);
    }

    public static String getDateDay() {
        Calendar ca = Calendar.getInstance();
        ca.setTime(new Date());
        return getDate(ca.getTime(), DAY_FORMATTER);
    }

    public static String getDateHour() {
        Calendar ca = Calendar.getInstance();
        ca.setTime(new Date());
        return getDate(ca.getTime(), HOUR_FORMATTER);
    }

    /**
     * 获取去年日期
     **/
    public static String getDateYesteryear() {
        Calendar ca = Calendar.getInstance();
        ca.setTime(new Date());
        //年份减1
        ca.add(Calendar.YEAR, -1);
        return getDate(ca.getTime(), DATE_FORMATTER);
    }

    /**
     * 获取上个月日期
     **/
    public static String getDateLastMonth() {
        Calendar ca = Calendar.getInstance();
        ca.setTime(new Date());
        ca.add(Calendar.MONTH, -1);
        return getDate(ca.getTime(), DATE_FORMATTER);
    }

    /**
     * 获取昨天日期
     **/
    public static String getDateYesterday() {
        Calendar ca = Calendar.getInstance();
        ca.setTime(new Date());
        ca.add(Calendar.DATE, -1);
        return getDate(ca.getTime(), DATE_FORMATTER);
    }

    /**
     * 获取年积日,当前年的第几天
     **/
    public static int getDateDOY() {
        final Date date = new Date();
        final Calendar ca = Calendar.getInstance();
        ca.setTime(date);
        return ca.get(Calendar.DAY_OF_YEAR);
    }

    /**
     * 获取UTC时间
     **/
    public static String getUTCTimeStrByOffset() {
        StringBuffer UTCTimeBuffer = new StringBuffer();
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        // 1、取得本地时间:
        Calendar cal = Calendar.getInstance();
        // 2、取得时间偏移量:
        int zoneOffset = cal.get(Calendar.ZONE_OFFSET);
        // 3、取得夏令时差:
        int dstOffset = cal.get(Calendar.DST_OFFSET);
        // 4、从本地时间里扣除这些差量,即可以取得UTC时间:
        cal.add(Calendar.MILLISECOND, -(zoneOffset + dstOffset));
        int year = cal.get(Calendar.YEAR);
        int month = cal.get(Calendar.MONTH) + 1;
        int day = cal.get(Calendar.DAY_OF_MONTH);
        int hour = cal.get(Calendar.HOUR_OF_DAY);
        int minute = cal.get(Calendar.MINUTE);
        UTCTimeBuffer.append(year).append("-").append(month).append("-").append(day);
        UTCTimeBuffer.append(" ").append(hour).append(":").append(minute);
        try {
            format.parse(UTCTimeBuffer.toString());
            return UTCTimeBuffer.toString();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * UTC时间转换成东八区时间
     **/
    public static String getLocalTimeFromUTC(String UTCTime) {
        Date UTCDate = null;
        String localTimeStr = null;
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        try {
            UTCDate = format.parse(UTCTime);
            format.setTimeZone(TimeZone.getTimeZone("GMT-8"));
            localTimeStr = format.format(UTCDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return localTimeStr;
    }

    /**
     * 判断日期是否相等
     **/
    public static boolean isEqualsDate(String beforeDate, String afterDate) {
        return StringUtils.equals(beforeDate, beforeDate);
    }

    /**
     * 获取年+年纪日
     * 例2022199
     * @return 结果集
     */
    public static String yyyyDOY(){
        int dayOfYear = DateUtil.date().dayOfYear();
        int year = DateUtil.date().year();
        String doy = String.format("%03d", dayOfYear);
        return year + doy;
    }
    /**
     * 获取年纪日
     * 例199
     * @return 结果集
     */
    public static String doy(){
        int dayOfYear = DateUtil.date().dayOfYear();
        return String.format("%03d", dayOfYear);
    }
    public static String utcDoy(){
        LocalDateTime utcNow = DateUtils.getLocalDateTime(ZoneOffset.UTC);
        int dayOfYear = utcNow.getDayOfYear();
        return String.format("%03d", dayOfYear);
    }
    public static String doy(int offset){
        int dayOfYear = DateUtil.date().dayOfYear();
        return String.format("%03d", dayOfYear + offset);
    }

    /**
     * 获取年+年纪日
     * 例2022199
     * @return 结果集
     */
    public static String yyyyDOY(DateTime dateTime){
        int dayOfYear = dateTime.dayOfYear();
        int year = dateTime.year();
        String doy = String.format("%03d", dayOfYear);
        return year + doy;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值