文档章节

JAVA Date时间工具类,底层使用LocalDateTime来进行转换封装

h
 huangkejie
发布于 10/16 23:44
字数 514
阅读 22
收藏 0
import java.text.ParseException;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Date;

/**
 * @description: 时间工具类
 * @author: kejie.huang
 * @date: Created in 2019/10/10 11:08
 * @version:
 * @modified By:
 */
public class DateUtils {
    public static final String DATE_FORMART_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
    /**
     * 指定日期加上天数后的日期
     * @param num 为增加的天数
     * @param currentDate 创建时间
     * @return
     * @throws ParseException
     */
    public static Date plusDay(int num, Date currentDate) {
        LocalDateTime localDateTime = dateConvertLocalDateTime(currentDate);
        localDateTime = localDateTime.plusDays(num);
        return localDateTimeConvertDate(localDateTime);
    }

    /**
     * @description 根据时间字符串转换成
     * @return
     * @author kejie.huang
     * @date 2019/10/10 11:19
     */
    public static Date dateStrConvertDate(String currentDate, String formateStr) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(formateStr);
        LocalDateTime localDateTime = LocalDateTime.parse(currentDate, dateTimeFormatter);
        return localDateTimeConvertDate(localDateTime);
    }

    /**
     * @return
     * @description 根据date转换成localDateTime
     * @author kejie.huang
     * @date 2019/10/14 14:31
     */
    private static LocalDateTime dateConvertLocalDateTime(Date date) {
        LocalDateTime localDateTime = Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
        return localDateTime;
    }

    /**
     * @return
     * @description 方法描述 根据localDateTime转换成date
     * @author kejie.huang
     * @date 2019/10/14 14:31
     */
    public static Date localDateTimeConvertDate(LocalDateTime localDateTime) {
        return Date.from(getZonedDateTimeByLocalDateTime(localDateTime).toInstant());
    }
    /**
     * @description 根据时间转换成时间字符串
     * @return
     * @author kejie.huang
     * @date 2019/10/10 11:19
     */
    public static String formatDateToParse(Date currentDate, String formateStr) {
        LocalDateTime localDateTime = dateConvertLocalDateTime(currentDate);
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(formateStr);
        return dateTimeFormatter.format(localDateTime);
    }
    /**
     * @description 根据开始时间,结束时间进行对比
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return
     * @author kejie.huang
     * @date 2019/10/10 11:16
     */
    public static boolean compareDay(Date startDate, Date endDate) {
        return startDate.before(endDate);
    }

    /**
     * @title DateUtils
     * @Description获取本月第一天
     * @author kejie.huang
     * @Date 2019/10/14 10:52
     * @Copyright 2019-2020
     */
    public static Date getMonthFirstDay() {
        LocalDateTime date = LocalDateTime.now();
        LocalDateTime firstday = date.with(TemporalAdjusters.firstDayOfMonth());
        return localDateTimeConvertDate(firstday);
    }

    /**
     * @title DateUtils
     * @Description获取本月最后一天
     * @author kejie.huang
     * @Date 2019/10/14 10:52
     * @Copyright 2019-2020
     */
    public static Date getMonthLastDay() {
        LocalDateTime date = LocalDateTime.now();
        LocalDateTime lastday = date.with(TemporalAdjusters.lastDayOfMonth());
        return localDateTimeConvertDate(lastday);
    }

    /**
     * @title DateUtils
     * @Description 根据localDateTime转换成ZonedDateTime对象,用于把localDatTime转成Date
     * @author kejie.huang
     * @Date 2019/10/14 11:03
     * @Copyright 2019-2020
     */
    public static ZonedDateTime getZonedDateTimeByLocalDateTime(LocalDateTime localDateTime) {
        ZoneId zoneId = ZoneId.systemDefault();
        ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId);
        return zonedDateTime;
    }

    /**
     * @return
     * @description 获得某天最大时间 2019-10-14 23:59:59
     * @author kejie.huang
     * @date 2019/10/14 10:56
     */
    public static Date getEndOfDay(Date date) {
        LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());
        ;
        LocalDateTime endOfDay = localDateTime.with(LocalTime.MAX);
        return localDateTimeConvertDate(endOfDay);
    }

    /**
     * @return
     * @description 获得某天最小时间 2019-10-14 00:00:00
     * @author kejie.huang
     * @date 2019/10/14 10:57
     */
    public static Date getStartOfDay(Date date) {
        LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());
        LocalDateTime startOfDay = localDateTime.with(LocalTime.MIN);
        return localDateTimeConvertDate(startOfDay);
    }
}

 

© 著作权归作者所有

h
粉丝 5
博文 59
码字总数 24380
作品 0
广州
程序员
私信 提问
Java 8 Time Api 使用指南-珍藏限量版

1.概述 Java 8为Date和Time引入了新的API,以解决旧和的缺点。作为本文的一部分,让我们从现有Date和Calendar API存在的一些问题入手,来探讨新的Java 8 Date和Time API如何解决这些问题。我...

码农小胖哥
08/28
91
0
Java 8 的时间日期 API

上一篇文章『Java 的时间日期 API』中,我们学习了由 Date、Calendar,DateFormat 等组成的「传统时间日期 API」,但是传统的处理接口设计并不是很友好,不易使用。终于,Java 8 借鉴第三方优...

Single_YAM
2018/04/23
0
0
在Java中,你真的会日期转换吗

1.什么是SimpleDateFormat 在java doc对SimpleDateFormat的解释如下: SimpleDateFormatis a concrete class for formatting and parsing dates in a locale-sensitive manner. It allows fo......

Java小铺
2018/07/19
110
0
为什么不建议使用Date,而是使用Java8新的时间和日期API?

Java 8:新的时间和日期API 在Java 8之前,所有关于时间和日期的API都存在各种使用方面的缺陷,因此建议使用新的时间和日期API,分别从旧的时间和日期的API的缺点以及解决方法、Java 8 新的时...

武培轩
10/30
0
0
日期和时间API - 读《Java 8实战》

日期与时间 LocalDate 创建一个LocalDate对象并读取其值 LocalTime 创建LocalTime并读取值 LocalDateTime 直接创建LocalDateTime对象或通过合并日期和时间的方式创建 Instant 机器的日期和时...

yysue
2018/08/14
182
0

没有更多内容

加载失败,请刷新页面

加载更多

Shell学习记录(持续更新)

一、shell定时备份数据库任务通用脚本 目标:根据定时任务启动脚本,执行数据库备份任务,按照日期进行每日备份,如已经备份则脚本停止,备份任务完成后将结果发送邮件提醒 1.执行数据库备份...

网络小虾米
今天
3
0
PHP计算两个经纬度地点之间的距离

/** * 求两个已知经纬度之间的距离,单位为米 * * @param lng1 $ ,lng2 经度 * @param lat1 $ ,lat2 纬度 * @return float 距离,单位米 * @author www.Alixixi.com */function get...

子枫Eric
今天
14
0
Linux—day 4

ch2 需要掌握的命令 (1)cat -n 1.txt (2)more 1.txt (3)head -n 15 initial-setup-ks.cfg (4)tail -n 17 initial-setup-ks.cfg;tail -f initial-setup-ks.cfg (5)cat -n anaconda-ks.c......

呵呵暖茶
今天
31
0
【Kubernetes社区之路】我的PR被抢了

2019年11月的某天,我无意间发现一个PR作者在自己的PR中抱怨自己的PR没被合入,而另一个比自己提交晚且内容几乎一样的PR则被合入了。 字里行间透露些许伤感外加无奈,原文如下: 作为一名开源...

恋恋美食
今天
40
0
阻塞队列

对于许多线程问题, 可以通过使用一个或多个队列以优雅且安全的方式将其形式化。生产者线程向队列插人元素, 消费者线程则取出它们。 使用队列, 可以安全地从一个线程向另 一个线程传递数据...

ytuan996
今天
48
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部