美文网首页
06-Joda时间工具

06-Joda时间工具

作者: 糖纸疯了 | 来源:发表于2021-11-22 11:38 被阅读0次

1、写作背景

总想走捷径的人,往往因找不到捷径而固步自封,一步不前!


2、参考网址


3、学习目的

  • 时间戳工具整理

4、核心操作

1)添加依赖

        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.10.5</version>
        </dependency>

2)时间工具类

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.Days;
import org.joda.time.LocalDateTime;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 时间工具类
 * 借助joda工具类
 */
@Slf4j
public class DateUtil {
    private DateUtil() {
        throw new IllegalStateException("不支持对象初始化");
    }

    /**
     * 将时间字符转化为时间
     * 可以转化YYYY_MM_DD和YYYY_MM_DD_HH_MM_SS的时间字符
     */
    public static Date getDateByDateStr(String dateStr) {
        String format = StringUtils.length(dateStr) == StringUtils.length(DateConstants.YYYY_MM_DD) ? DateConstants.YYYY_MM_DD : DateConstants.YYYY_MM_DD_HH_MM_SS;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
        try {
            return simpleDateFormat.parse(dateStr);
        } catch (ParseException e) {
            String errMsg = String.format("时间格式化失败,[date=%s]不合法", dateStr);
            log.error(errMsg);
            // TODO 改为自己项目的自定义异常
            throw new RuntimeException(errMsg);
        }
    }


    /**
     * 将YYYY_MM_DD 转化为 将YYYY_MM_DD_HH_MM_SS
     */
    public static String getStartFullTimeofDateStr(String dataStr) {
        Date dateByString = getDateByDateStr(dataStr);
        LocalDateTime startLocalTimeByDate = getStartLocalTimeByDate(dateByString);
        String fullDateTimeStr = new LocalDateTime(startLocalTimeByDate).
                toString(DateConstants.YYYY_MM_DD_HH_MM_SS);
        log.info("转化后的全量时间:" + fullDateTimeStr);
        return fullDateTimeStr;
    }

    /**
     * 获取今天的开始的全量时间 YYYY_MM_DD_HH_MM_SS
     */
    public static String getStartFullTimeOfToday() {
        String fullDateTimeStr = new LocalDateTime().
                hourOfDay().withMaximumValue().
                minuteOfHour().withMinimumValue().
                secondOfMinute().withMinimumValue().
                millisOfSecond().withMinimumValue().
                toString(DateConstants.YYYY_MM_DD_HH_MM_SS);
        log.info("今天最早的开始时间:" + fullDateTimeStr);
        return fullDateTimeStr;
    }

    /**
     * 获取今天的结束的全量时间 YYYY_MM_DD_HH_MM_SS
     */
    public static String getEndFullTimeOfToday() {
        String fullDateTimeStr = new LocalDateTime().
                hourOfDay().withMaximumValue().
                minuteOfHour().withMaximumValue().
                secondOfMinute().withMaximumValue().
                millisOfSecond().withMaximumValue().
                toString(DateConstants.YYYY_MM_DD_HH_MM_SS);
        log.info("今天最晚的结束时间:" + fullDateTimeStr);
        return fullDateTimeStr;
    }

    /**
     * 获取昨天的开始的全量时间 YYYY_MM_DD_HH_MM_SS
     */
    public static String getStartFullTimeOfYesterday() {
        String fullDateTimeStr = new LocalDateTime().
                plusDays(-1).
                hourOfDay().withMaximumValue().
                minuteOfHour().withMinimumValue().
                secondOfMinute().withMinimumValue().
                millisOfSecond().withMinimumValue().
                toString(DateConstants.YYYY_MM_DD_HH_MM_SS);
        log.info("昨天最早的开始时间:" + fullDateTimeStr);
        return fullDateTimeStr;
    }

    /**
     * 获取月初的开始的全量时间 YYYY_MM_DD_HH_MM_SS
     */
    public static String getStartFullTimeOfMonth() {
        String fullDateTimeStr = new LocalDateTime().
                dayOfMonth().withMinimumValue().
                hourOfDay().withMaximumValue().
                minuteOfHour().withMinimumValue().
                secondOfMinute().withMinimumValue().
                millisOfSecond().withMinimumValue().
                toString(DateConstants.YYYY_MM_DD_HH_MM_SS);
        log.info("月初最早的开始时间:" + fullDateTimeStr);
        return fullDateTimeStr;
    }

    /**
     * 获取指定时间的最晚的全量时间 YYYY_MM_DD_HH_MM_SS
     */
    public static String getEndFullTimeByDateStr(String dataStr) {
        Date date = getDateByDateStr(dataStr);
        String fullDateTimeStr = new LocalDateTime(date).
                hourOfDay().withMaximumValue().
                minuteOfHour().withMaximumValue().
                secondOfMinute().withMaximumValue().
                millisOfSecond().withMaximumValue().
                toString(DateConstants.YYYY_MM_DD_HH_MM_SS);
        log.info("指定的时间最晚结束时间:" + fullDateTimeStr);
        return fullDateTimeStr;
    }

    /**
     * 转化date为LocalDateTime,并获取最早开始时间 YYYY_MM_DD_HH_MM_SS
     */
    public static LocalDateTime getStartLocalTimeByDate(Date date) {
        LocalDateTime localDateTime = new LocalDateTime(date).
                hourOfDay().withMaximumValue().
                minuteOfHour().withMaximumValue().
                secondOfMinute().withMaximumValue().
                millisOfSecond().withMaximumValue();
        log.info("转化date为LocalDateTime,并获取最早开始时间:" + localDateTime.toString(DateConstants.YYYY_MM_DD_HH_MM_SS));
        return localDateTime;
    }

    /**
     * 距离指定时间点的时间间隔(单位:天)
     */
    public static long getDayGapFromDate(String dateStr, Date date) {
        Date dateByDateString = getDateByDateStr(dateStr);
        LocalDateTime dateTimeAgo = getStartLocalTimeByDate(dateByDateString);
        LocalDateTime currentDateTime = getStartLocalTimeByDate(date);

        int days = Days.daysBetween(dateTimeAgo, currentDateTime).getDays();
        log.info("距离指定时间点的时间间隔(单位:天):" + days);
        return days;
    }

    /**
     * 距离指定时间点的时间间隔(单位:天)
     */
    public static long getDayGapFromDate(String dateStr1, String dateStr2) {
        Date date1 = getDateByDateStr(dateStr1);
        LocalDateTime dateTime1 = getStartLocalTimeByDate(date1);

        Date date2 = getDateByDateStr(dateStr2);
        LocalDateTime dateTime2 = getStartLocalTimeByDate(date2);

        int days = Days.daysBetween(dateTime1, dateTime2).getDays();
        log.info("距离指定时间点的时间间隔(单位:天):" + days);
        return days;
    }

    /**
     * 最小的时间字符
     */
    public static String getSmallerDateStr(String dateStr1, String dateStr2) {
        long compareValue = getDayGapFromDate(dateStr1, dateStr2);
        String smallerStr = compareValue >= 0 ? dateStr1 : dateStr2;
        log.info("最小的时间字符:" + smallerStr);
        return smallerStr;
    }

    /**
     * 是否在同一天
     */
    public static boolean whetherInSameDay(String dateStr1, String dateStr2) {
        boolean sameDay = getDayGapFromDate(dateStr1, dateStr2) == 0;
        log.info("是否在同一天:" + sameDay);
        return sameDay;
    }

}

3)测试方法使用

XXXX

XXXX


5、课后习题

1)XXXX


相关文章

  • 06-Joda时间工具

    1、写作背景 总想走捷径的人,往往因找不到捷径而固步自封,一步不前! 2、参考网址 3、学习目的 时间戳工具整理 ...

  • 时间工具

  • 工具&时间

    工具 工具和人的关系,很有意思的话题。当然啦,最后的结论肯定是人会选择工具,工具又反过来塑造人。但是我想说的是,工...

  • 时间工具类

    package com.zymotor.eutech.web.util; import org.springfra...

  • 时间工具类

    1.本周开始时间戳 - 以星期一为本周的第一天 public static String getWeekStart...

  • 时间工具类

    package com.liumu.util; import java.sql.Timestamp; import...

  • 时间工具类

    去除时间的时分秒

  • 自我管理的29个工具(PPT版)

    工具1 用“四象限原理”规划时间 工具2 用80/20法则分配时间 工具3 用“ABC控制法”使用时间 工具4 用...

  • Unix时间戳--时间工具类

    工作之余写的一个关于Unix时间的工具 UnixTime.m文件包含方法的具体实现,用法都在.h文件里写了

  • #工具# 时间管理

    时间就是金钱,白驹过隙,弹指一挥间,关于时间金贵的语句实在太多,人生不过一张A4纸的长度。都说时间是世上最公平的的...

网友评论

      本文标题:06-Joda时间工具

      本文链接:https://www.haomeiwen.com/subject/kfvdtrtx.html