JodaTimeUtils时间转换工具类 string或者long类型转Date格式等等

/*
 * Copyright 2021 Wicrenet, Inc. All rights reserved.
 */
package com.hq.cloud.utils;

import com.hq.cloud.verify.Asserts;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * JodaTime 时间工具
 *
 * @author yangjunxiong
 * @date 2021/1/5 09:18
 */
public final class JodaTimeUtils {
    private static final Logger   logger   = LoggerFactory.getLogger(JodaTimeUtils.class);
    private static       String[] patterns = new String[]{"yyyy-MM-dd'T'HH:mm:ss.sss", "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "HH:mm:ss", "yyyy-MM-dd'T'HH:mm:ss"};

    private JodaTimeUtils() {
    }

    //Date To java.time.LocalDateTime
    static public java.time.LocalDateTime tojtLocalDateTime(Date date) {
        GregorianCalendar cal = new GregorianCalendar();
        cal.setTime(date);
        ZonedDateTime zdt = cal.toZonedDateTime();
        return zdt.toLocalDateTime();
    }

    //java.time.LocalDateTime To Date
    static public Date toDate(java.time.LocalDateTime ldt) {
        ZonedDateTime zdt = ZonedDateTime.of(ldt, ZoneId.systemDefault());
        GregorianCalendar cal = GregorianCalendar.from(zdt);
        return cal.getTime();
    }

    /**
     * 根据当天日期,获取当天的时间临界点时间
     *
     * @param localDate
     * @return
     */
    public static ImmutablePair<LocalDateTime, LocalDateTime> criticalTimeDay(LocalDate localDate) {
        Asserts.notNull(localDate);
        LocalDateTime beginTime = new LocalDateTime(localDate.getYear(), localDate.getMonthOfYear(), localDate.getDayOfMonth(), 0, 0, 0, 0);
        LocalDateTime endTime = new LocalDateTime(localDate.getYear(), localDate.getMonthOfYear(), localDate.getDayOfMonth(), 23, 59, 59, 0);
        return ImmutablePair.of(beginTime, endTime);
    }

    /**
     * 根据当天日期,获取当月的时间临界点时间
     *
     * @param LocalDateTime
     * @return
     */
    public static ImmutablePair<LocalDateTime, LocalDateTime> criticalTimeMonth(LocalDateTime LocalDateTime) {
        Asserts.notNull(LocalDateTime);
        java.time.LocalDateTime localDateTime = JodaTimeUtils.tojtLocalDateTime(LocalDateTime.toDate());
        org.joda.time.LocalDateTime beginTime = JodaTimeUtils.minTime(new LocalDate(JodaTimeUtils.toDateIsString(localDateTime.with(TemporalAdjusters.firstDayOfMonth()).toString())));
        org.joda.time.LocalDateTime endTime = JodaTimeUtils.maxTime(new LocalDate(JodaTimeUtils.toDateIsString(localDateTime.with(TemporalAdjusters.lastDayOfMonth()).toString())));
        return ImmutablePair.of(beginTime, endTime);
    }

    /**
     * 获取当天的最小值
     *
     * @param localDate
     * @return
     */
    public static LocalDateTime minTime(LocalDate localDate) {
        Asserts.notNull(localDate);
        return new LocalDateTime(localDate.getYear(), localDate.getMonthOfYear(), localDate.getDayOfMonth(), 0, 0, 0, 0);
    }

    /**
     * 获取当天的最大值
     *
     * @param localDate
     * @return
     */
    public static LocalDateTime maxTime(LocalDate localDate) {
        Asserts.notNull(localDate);
        return new LocalDateTime(localDate.getYear(), localDate.getMonthOfYear(), localDate.getDayOfMonth(), 23, 59, 59, 999);
    }

    /*
     * 【 获取时间段内的所有日期 】
     *
     * @author  YJX
     * @date 2021/1/5 09:18
     * @param startTime
     * @param endTime
     * @return java.util.ArrayList<org.joda.time.LocalDate>
     **/
    public static ArrayList<LocalDate> getLocalDates(LocalDate startTime, LocalDate endTime) {
        ArrayList<LocalDate> localDates = new ArrayList<>();
        do {
            localDates.add(startTime);
            startTime = startTime.plusDays(1);
        } while (endTime.toDate().getTime() > startTime.toDate().getTime());
        return localDates;
    }

    /*
     * 【 获取时间段内的所有日期 】
     *
     * @author  YJX
     * @date 2021/1/5 09:18
     * @param startTime
     * @param endTime
     * @return java.util.ArrayList<org.joda.time.LocalDate>
     **/
    public static ArrayList<LocalDate> getLocalDates(Date startTime, Date endTime) {
        LocalDate tradeDate = new LocalDate(startTime);
        ArrayList<LocalDate> localDates = new ArrayList<>();
        do {
            localDates.add(tradeDate);
            tradeDate = tradeDate.plusDays(1);
        } while (endTime.getTime() > tradeDate.toDate().getTime());
        return localDates;
    }

    /**
     * 【 String字符串转Date格式  】
     *
     * @param dateString 需要转换的时间字段串(可以是时间戳或者patterns的类型)
     * @param dateFormat 传的是时间字符串  不传默认解析:"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm"
     * @return java.util.Date
     * @author yangjunxiong
     * @date 2021/1/5 09:18
     **/
    public static Date toDateIsString(String dateString, String... dateFormat) {

        if (StringUtils.isBlank(dateString)) {
            return null;
        }
        try {
            //执行自定义的格式转换
            if (dateFormat.length > 0) {
                return DateUtils.parseDate(dateString, dateFormat);
            }
            return DateUtils.parseDate(dateString, patterns);
        } catch (ParseException e) {
            logger.error("字符串时间格式化出错:{}", dateString);
            return null;
        }
    }

    /**
     * 【 时间戳 】
     *
     * @param dateString
     * @return java.util.Date
     * @author yangjunxiong
     * @date 2021/6/11 17:25
     **/
    public static Date toDateIsNumeric(String dateString) {
        if (StringUtils.isBlank(dateString)) {
            return null;
        }
        try {
            //如果传的是时间戳
            if (StringUtils.isNumeric(dateString)) {
                return new Date(Long.parseLong(dateString));
            }
        } catch (NumberFormatException e) {
            logger.error("字符串时间格式化出错:{}", dateString);
            return null;
        }
        return null;
    }

    /**
     * 获取本年的最后一天
     *
     * @return String
     **/
    public static Date getYearEnd() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MONTH, calendar.getActualMaximum(Calendar.MONTH));
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        Date currYearLast = calendar.getTime();
        return toDateIsString(new SimpleDateFormat("yyyy-MM-dd").format(currYearLast) + " 23:59:59", "yyyy-MM-dd HH:mm:ss");
    }

    public static Date[] getMonthformartDate(String dateTime) {
        Date[] formartDate = new Date[2];
        if (StringUtils.isNotBlank(dateTime)) {
            formartDate[0] = toDateIsString(dateTime, "YYYY-MM");
            formartDate[1] = LocalDate.fromDateFields(formartDate[0]).plusMonths(1).toDate();
        } else {
            formartDate[0] = LocalDate.now().plusMonths(-1).toDate();
            formartDate[1] = new Date();
        }
        return formartDate;
    }

    /**
     * @param date 日期
     * @return 获取指定日期的最后时分秒
     */
    public static Date getLastDate(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        // 将时分秒,毫秒域清零
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        return calendar.getTime();
    }

    /**
     * 根据时间获取具体日期
     *
     * @param now
     * @return
     */
    public static Date getBeforeDate(Date now, int count) {
        Calendar c = Calendar.getInstance();
        c.setTime(now);
        c.set(Calendar.HOUR_OF_DAY, 00);
        c.set(Calendar.MINUTE, 00);
        c.set(Calendar.SECOND, 00);
        c.set(Calendar.MILLISECOND, 000);
        c.add(Calendar.MONTH, count);
        return c.getTime();
    }

    /**
     * 根据时间和间隔获取时间范围
     *
     * @param now
     * @return
     */
    public static Date[] getBeforeDate(Date now, int startCount, int endCount) {
        Date[] dates = new Date[2];
        Calendar c = Calendar.getInstance();
        c.setTime(now);
        c.set(Calendar.HOUR_OF_DAY, 00);
        c.set(Calendar.MINUTE, 00);
        c.set(Calendar.SECOND, 00);
        c.set(Calendar.MILLISECOND, 000);
        c.add(Calendar.MONTH, startCount);
        dates[0] = c.getTime();
        Calendar c2 = Calendar.getInstance();
        c2.setTime(now);
        c2.set(Calendar.HOUR_OF_DAY, 23);
        c2.set(Calendar.MINUTE, 23);
        c2.set(Calendar.SECOND, 59);
        c2.set(Calendar.MILLISECOND, 999);
        c2.add(Calendar.MONTH, endCount);
        dates[1] = c2.getTime();
        return dates;
    }

    /**
     * 获得下个月1号零时零分零秒
     *
     * @return
     */
    public static String initDateByMonth() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.add(Calendar.MONTH, 1);
        SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time = String.valueOf(simpleDate.format(calendar.getTime()));
        return time;
    }

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值