package com.changfu.common.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.sql.Timestamp;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar; /**
* 时间计算工具类
*/
public class DateUtil { /**
* the milli second of a day
*/
public static final long DAYMILLI = 24 * 60 * 60 * 1000;
/**
* the milli seconds of an hour
*/
public static final long HOURMILLI = 60 * 60 * 1000;
/**
* the milli seconds of a minute
*/
public static final long MINUTEMILLI = 60 * 1000;
/**
* the milli seconds of a second
*/
public static final long SECONDMILLI = 1000;
/**
* added time
*/
public static final String TIMETO = " 23:59:59";
/**
* flag before
*/
public static final transient int BEFORE = 1;
/**
* flag after
*/
public static final transient int AFTER = 2;
/**
* flag equal
*/
public static final transient int EQUAL = 3;
/**
* date format dd/MMM/yyyy:HH:mm:ss +0900
*/
public static final String TIME_PATTERN_LONG = "dd/MMM/yyyy:HH:mm:ss +0900";
/**
* date format dd/MM/yyyy:HH:mm:ss +0900
*/
public static final String TIME_PATTERN_LONG2 = "dd/MM/yyyy:HH:mm:ss +0900";
/**
* date format YYYY-MM-DD HH24:MI:SS
*/
public static final String DB_TIME_PATTERN = "YYYY-MM-DD HH24:MI:SS";
/**
* date format YYYYMMDDHH24MISS
*/
public static final String DB_TIME_PATTERN_1 = "YYYYMMDDHH24MISS";
/**
* date format dd/MM/yy HH:mm:ss
*/
public static final String TIME_PATTERN_SHORT = "dd/MM/yy HH:mm:ss";
/**
* date format dd/MM/yy HH24:mm
*/
public static final String TIME_PATTERN_SHORT_1 = "yyyy/MM/dd HH:mm";
/**
* date format yyyy年MM月dd日 HH:mm:ss
*/
public static final String TIME_PATTERN_SHORT_2 = "yyyy年MM月dd日 HH:mm:ss";
/**
* date format yyyyMMddHHmmss
*/
public static final String TIME_PATTERN_SESSION = "yyyyMMddHHmmss";
/**
* date format yyyyMMddHHmmssSSS
*/
public static final String TIME_PATTERN_MILLISECOND = "yyyyMMddHHmmssSSS";
/**
* date format yyyyMMdd
*/
public static final String DATE_FMT_0 = "yyyyMMdd";
/**
* date format yyyy/MM/dd
*/
public static final String DATE_FMT_1 = "yyyy/MM/dd";
/**
* date format yyyy/MM/dd hh:mm:ss
*/
public static final String DATE_FMT_2 = "yyyy/MM/dd hh:mm:ss";
/**
* date format yyyy-MM-dd
*/
public static final String DATE_FMT_3 = "yyyy-MM-dd";
/**
* date format yyyy年MM月dd日
*/
public static final String DATE_FMT_4 = "yyyy年MM月dd日";
/**
* date format yyyy-MM-dd HH
*/
public static final String DATE_FMT_5 = "yyyy-MM-dd HH";
/**
* date format yyyy-MM
*/
public static final String DATE_FMT_6 = "yyyy-MM";
/**
* date format MM月dd日 HH:mm
*/
public static final String DATE_FMT_7 = "MM月dd日 HH:mm";
/**
* date format MM月dd日 HH:mm
*/
public static final String DATE_FMT_8 = "HH:mm:ss";
/**
* date format MM月dd日 HH:mm
*/
public static final String DATE_FMT_9 = "yyyy.MM.dd";
public static final String DATE_FMT_10 = "HH:mm";
public static final String DATE_FMT_11 = "yyyy.MM.dd HH:mm:ss";
/**
* date format yyyy年MM月dd日
*/
public static final String DATE_FMT_12 = "MM月dd日";
public static final String DATE_FMT_13 = "yyyy年MM月dd日HH时mm分";
public static final String DATE_FMT_14 = "yyyyMM";
public static final String DATE_FMT_15 = "MM-dd HH:mm:ss";
public static final String DATE_FMT_16 = "yyyyMMddHHmm";
public static final String DATE_FMT_17 = "HHmmss";
public static final String DATE_FMT_18 = "yyyy";
/**
* date format yyyy-MM-dd HH:mm:ss
*/
public static final String TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
private static final Logger logger = LoggerFactory.getLogger(DateUtil.class); /**
* localDateTime 转 自定义格式string
*
* @param localDateTime
* @param format 例:yyyy-MM-dd hh:mm:ss
* @return
*/
public static String formatLocalDateTimeToString(LocalDateTime localDateTime, String format) {
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
return localDateTime.format(formatter); } catch (DateTimeParseException e) {
e.printStackTrace();
}
return null;
} /**
* string 转 LocalDateTime
*
* @param dateStr 例:"2017-08-11 01:00:00"
* @param format 例:"yyyy-MM-dd HH:mm:ss"
* @return
*/
public static LocalDateTime stringToLocalDateTime(String dateStr, String format) {
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
return LocalDateTime.parse(dateStr, formatter);
} catch (DateTimeParseException e) {
e.printStackTrace();
}
return null;
} /**
* 根据时间获取当月有多少天数
*
* @param date
* @return
*/
public static int getActualMaximum(Date date) { return dateToLocalDateTime(date).getMonth().length(dateToLocalDate(date).isLeapYear());
} /**
* 根据日期获得星期
*
* @param date
* @return 1:星期一;2:星期二;3:星期三;4:星期四;5:星期五;6:星期六;7:星期日;
*/
public static int getWeekOfDate(Date date) {
return dateToLocalDateTime(date).getDayOfWeek().getValue();
} /**
* 计算两个日期LocalDate相差的天数,不考虑日期前后,返回结果>=0
*
* @param before
* @param after
* @return
*/
public static int getAbsDateDiffDay(LocalDate before, LocalDate after) { return Math.abs(Period.between(before, after).getDays());
} /**
* 计算两个时间LocalDateTime相差的天数,不考虑日期前后,返回结果>=0
*
* @param before
* @param after
* @return
*/
public static int getAbsTimeDiffDay(LocalDateTime before, LocalDateTime after) { return Math.abs(Period.between(before.toLocalDate(), after.toLocalDate()).getDays());
} /**
* 计算两个时间LocalDateTime相差的月数,不考虑日期前后,返回结果>=0
*
* @param before
* @param after
* @return
*/
public static int getAbsTimeDiffMonth(LocalDateTime before, LocalDateTime after) { return Math.abs(Period.between(before.toLocalDate(), after.toLocalDate()).getMonths());
} /**
* 计算两个时间LocalDateTime相差的年数,不考虑日期前后,返回结果>=0
*
* @param before
* @param after
* @return
*/
public static int getAbsTimeDiffYear(LocalDateTime before, LocalDateTime after) { return Math.abs(Period.between(before.toLocalDate(), after.toLocalDate()).getYears());
} /**
* 根据传入日期返回星期几
*
* @param date 日期
* @return 1-7 1:星期天,2:星期一,3:星期二,4:星期三,5:星期四,6:星期五,7:星期六
*/
public static int getDayOfWeek(Date date) {
Calendar cal = new GregorianCalendar();
cal.setTime(date);
return cal.get(Calendar.DAY_OF_WEEK);
} /**
* 获取指定日期的当月的月份数
*
* @param date
* @return
*/
public static int getLastMonth(Date date) {
return dateToLocalDateTime(date).getMonth().getValue(); } /**
* 特定日期的当月第一天
*
* @param date
* @return
*/
public static LocalDate newThisMonth(Date date) {
LocalDate localDate = dateToLocalDate(date);
return LocalDate.of(localDate.getYear(), localDate.getMonth(), 1);
} /**
* 特定日期的当月最后一天
*
* @param date
* @return
*/
public static LocalDate lastThisMonth(Date date) {
int lastDay = getActualMaximum(date);
LocalDate localDate = dateToLocalDate(date);
return LocalDate.of(localDate.getYear(), localDate.getMonth(), lastDay);
} /**
* 特定日期的当年第一天
*
* @param date
* @return
*/
public static LocalDate newThisYear(Date date) {
LocalDate localDate = dateToLocalDate(date);
return LocalDate.of(localDate.getYear(), 1, 1); } public static void main(String[] args) {
} public static Timestamp getCurrentDateTime() {
return new Timestamp(Instant.now().toEpochMilli()); } /**
* 获取当前时间
*
* @return LocalDateTime
*/
public static LocalDateTime getCurrentLocalDateTime() {
return LocalDateTime.now(Clock.system(ZoneId.of("Asia/Shanghai"))); } /**
* 修改日期时间的时间部分
*
* @param date
* @param customTime 必须为"hh:mm:ss"这种格式
*/
public static LocalDateTime reserveDateCustomTime(Date date, String customTime) {
String dateStr = dateToLocalDate(date).toString() + " " + customTime;
return stringToLocalDateTime(dateStr, "yyyy-MM-dd HH:mm:ss");
} /**
* 修改日期时间的时间部分
*
* @param date
* @param customTime 必须为"hh:mm:ss"这种格式
*/
public static LocalDateTime reserveDateCustomTime(Timestamp date, String customTime) {
String dateStr = timestampToLocalDate(date).toString() + " " + customTime;
return stringToLocalDateTime(dateStr, "yyyy-MM-dd HH:mm:ss");
} /**
* 把日期后的时间归0 变成(yyyy-MM-dd 00:00:00:000)
*
* @param date
* @return LocalDateTime
*/
public static final LocalDateTime zerolizedTime(Date date) {
LocalDateTime localDateTime = dateToLocalDateTime(date);
return LocalDateTime.of(localDateTime.getYear(), localDateTime.getMonth(), localDateTime.getDayOfMonth(), 0, 0, 0, 0); } /**
* 把时间变成(yyyy-MM-dd 00:00:00:000)
*
* @param date
* @return LocalDateTime
*/
public static LocalDateTime zerolizedTime(Timestamp date) {
LocalDateTime localDateTime = timestampToLocalDateTime(date);
return LocalDateTime.of(localDateTime.getYear(), localDateTime.getMonth(), localDateTime.getDayOfMonth(), 0, 0, 0, 0);
} /**
* 把日期的时间变成(yyyy-MM-dd 23:59:59:999)
*
* @param date
* @return LocalDateTime
*/
public static LocalDateTime getEndTime(Date date) {
LocalDateTime localDateTime = dateToLocalDateTime(date);
return LocalDateTime.of(localDateTime.getYear(), localDateTime.getMonth(), localDateTime.getDayOfMonth(), 23, 59, 59, 999 * 1000000);
} /**
* 把时间变成(yyyy-MM-dd 23:59:59:999)
*
* @param date
* @return LocalDateTime
*/
public static LocalDateTime getEndTime(Timestamp date) {
LocalDateTime localDateTime = timestampToLocalDateTime(date);
return LocalDateTime.of(localDateTime.getYear(), localDateTime.getMonth(), localDateTime.getDayOfMonth(), 23, 59, 59, 999 * 1000000);
} /**
* 计算特定时间到 当天 23.59.59.999 的秒数
*
* @return
*/
public static int calculateToEndTime(Date date) {
LocalDateTime localDateTime = dateToLocalDateTime(date);
LocalDateTime end = getEndTime(date);
return (int) (end.toEpochSecond(ZoneOffset.UTC) - localDateTime.toEpochSecond(ZoneOffset.UTC));
} /**
* 增加或减少年/月/周/天/小时/分/秒数
*
* @param localDateTime 例:ChronoUnit.DAYS
* @param chronoUnit
* @param num
* @return LocalDateTime
*/
public static LocalDateTime addTime(LocalDateTime localDateTime, ChronoUnit chronoUnit, int num) {
return localDateTime.plus(num, chronoUnit);
} /**
* 增加或减少年/月/周/天/小时/分/秒数
*
* @param chronoUnit 例:ChronoUnit.DAYS
* @param num
* @return LocalDateTime
*/
public static LocalDateTime addTime(Date date, ChronoUnit chronoUnit, int num) {
long nanoOfSecond = (date.getTime() % 1000) * 1000000;
LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(date.getTime() / 1000, (int) nanoOfSecond, ZoneOffset.of("+8"));
return localDateTime.plus(num, chronoUnit);
} /**
* 增加或减少年/月/周/天/小时/分/秒数
*
* @param chronoUnit 例:ChronoUnit.DAYS
* @param num
* @return LocalDateTime
*/
public static LocalDateTime addTime(Timestamp date, ChronoUnit chronoUnit, int num) {
long nanoOfSecond = (date.getTime() % 1000) * 1000000;
LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(date.getTime() / 1000, (int) nanoOfSecond, ZoneOffset.of("+8"));
return localDateTime.plus(num, chronoUnit);
} /**
* Date 转 LocalDateTime
*
* @param date
* @return LocalDateTime
*/
public static LocalDateTime dateToLocalDateTime(Date date) {
long nanoOfSecond = (date.getTime() % 1000) * 1000000;
LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(date.getTime() / 1000, (int) nanoOfSecond, ZoneOffset.of("+8")); return localDateTime;
} /**
* Timestamp 转 LocalDateTime
*
* @param date
* @return LocalDateTime
*/
public static LocalDateTime timestampToLocalDateTime(Timestamp date) {
LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(date.getTime() / 1000, date.getNanos(), ZoneOffset.of("+8")); return localDateTime;
} /**
* Date 转 LocalDateTime
*
* @param date
* @return LocalDate
*/
public static LocalDate dateToLocalDate(Date date) { return dateToLocalDateTime(date).toLocalDate();
} /**
* timestamp 转 LocalDateTime
*
* @param date
* @return LocalDate
*/
public static LocalDate timestampToLocalDate(Timestamp date) { return timestampToLocalDateTime(date).toLocalDate();
} /**
* 比较两个LocalDateTime是否同一天
*
* @param begin
* @param end
* @return
*/
public static boolean isTheSameDay(LocalDateTime begin, LocalDateTime end) {
return begin.toLocalDate().equals(end.toLocalDate());
} /**
* 比较两个时间LocalDateTime大小
*
* @param time1
* @param time2
* @return 1:第一个比第二个大;0:第一个与第二个相同;-1:第一个比第二个小
*/
public static int compareTwoTime(LocalDateTime time1, LocalDateTime time2) { if (time1.isAfter(time2)) {
return 1;
} else if (time1.isBefore(time2)) {
return -1;
} else {
return 0;
}
} /**
* 比较time1,time2两个时间相差的秒数,如果time1<=time2,返回0
*
* @param time1
* @param time2
*/
public static long getTwoTimeDiffSecond(Timestamp time1, Timestamp time2) {
long diff = timestampToLocalDateTime(time1).toEpochSecond(ZoneOffset.UTC) - timestampToLocalDateTime(time2).toEpochSecond(ZoneOffset.UTC);
if (diff > 0) {
return diff;
} else {
return 0;
}
} /**
* 比较time1,time2两个时间相差的分钟数,如果time1<=time2,返回0
*
* @param time1
* @param time2
*/
public static long getTwoTimeDiffMin(Timestamp time1, Timestamp time2) {
long diff = getTwoTimeDiffSecond(time1, time2) / 60;
if (diff > 0) {
return diff;
} else {
return 0;
}
} /**
* 比较time1,time2两个时间相差的小时数,如果time1<=time2,返回0
*
* @param time1
* @param time2
*/
public static long getTwoTimeDiffHour(Timestamp time1, Timestamp time2) {
long diff = getTwoTimeDiffSecond(time1, time2) / 3600;
if (diff > 0) {
return diff;
} else {
return 0;
}
} /**
* 判断当前时间是否在时间范围内
*
* @param startTime
* @param endTime
* @return
*/
public static boolean isTimeInRange(Date startTime, Date endTime) throws Exception {
LocalDateTime now = getCurrentLocalDateTime();
LocalDateTime start = dateToLocalDateTime(startTime);
LocalDateTime end = dateToLocalDateTime(endTime);
return (start.isBefore(now) && end.isAfter(now)) || start.isEqual(now) || end.isEqual(now);
} }
http://blog.csdn.net/chenleixing/article/details/44408875 ————————————————
版权声明:本文为CSDN博主「feicongcong」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/feicongcong/article/details/78224494

jdk8 时间日期工具类(转)的更多相关文章

  1. 11、Java 日期时间 日期工具类

    一.简介 在Java8之前,日期时间API一直被开发者诟病,包括:java.util.Date是可变类型,SimpleDateFormat非线程安全等问题.故此,Java8引入了一套全新的日期时间处理 ...

  2. 【commons】时间日期工具类——commons-lang3-time

    推荐参考:http://www.cnblogs.com/java-class/p/4845962.html https://blog.csdn.net/yihaoawang/article/detai ...

  3. Java日期工具类,Java时间工具类,Java时间格式化

    Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...

  4. [java工具类01]__构建格式化输出日期和时间的工具类

    在之前的学习中,我写过一篇关于字符串格式化的,就主要设计到了时间以及日期的各种格式化显示的设置,其主要时通过String类的fomat()方法实现的. 我们可以通过使用不同的转换符来实现格式化显示不同 ...

  5. Java日期时间实用工具类

    Java日期时间实用工具类 1.Date (java.util.Date)    Date();        以当前时间构造一个Date对象    Date(long);        构造函数   ...

  6. Java获取上周,本周,本月,本年,开始结束时间 。日期工具类

    由于获取日期经常会使用到,所有我自己写了一个工具类 1.基本上能用上的都写出来了,包括:1)获取当天的开始时间 2)获取当天的结束时间 3)获取昨天的开始时间 4)获取昨天的结束时间 5)获取明天的开 ...

  7. 日期工具类 - DateUtil.java

    日期工具类,提供对日期的格式化和转换方法.获取区间日期.指定日期.每月最后一天等. 源码如下:(点击下载 -DateUtil.java.commons-lang-2.6.jar ) import ja ...

  8. JS 日期工具类-基于yDate

    源码下载 前言:最近在用到JS日期操作时,发现有一些不方便,于是搜素了一些网上的资料,基于一个开源工具类-yDate 进行了个性化定制,封装成了一个日期工具类工具函数大概介绍:1.普通的日期操作2. ...

  9. JAVA 8 日期工具类

    JAVA 8 日期工具类 主题描述 JAVA中日期时间的历史 代码成果 主题描述 JAVA的日期时间一直比较混乱,本来以为joda会是巅峰,但是JAVA 8改变了我的思想.但是即便在JAVA 8面前, ...

随机推荐

  1. poj1410(判断线段和矩形是否相交)

    题目链接:https://vjudge.net/problem/POJ-1410 题意:判断线段和矩形是否相交. 思路:注意这里的相交包括线段在矩形内,因此先判断线段与矩形的边是否相交,再判断线段的两 ...

  2. 【转帖】lmbench的简单使用

    https://www.cnblogs.com/mutong1228/p/10485840.html 下载地址 http://www.bitmover.com/lmbench/ tar -zxvf l ...

  3. 快速查看表结构 SQL server查看表注释以及字段注释表结构字段说明

    DECLARE @tableName NVARCHAR(MAX);SET @tableName = N'UserIntegralExchange';   --表名!!! SELECT CASE WHE ...

  4. 【第一季】CH08_FPGA_Button 按钮去抖动实验

    [第一季]CH08_FPGA_Button 按钮去抖动实验 按键的消抖,是指按键在闭合或松开的瞬间伴随着一连串的抖动,这样的抖动将直接影响设计系统的稳定性,降低响应灵敏度.因此,必须对抖动进行处理,即 ...

  5. html5手机网页开发,中文输入法下软键盘遮挡输入框

    安卓手机解决办法 微信UI框架weui中给出了解决方法:weui框架http://weui.github.io/weui/example.js // .container 设置了 overflow 属 ...

  6. Java 同一个类的不同实例对象竟然可以相互访问各自的private成员

    如题,在看String源码的某个函数时,发现了这个操作是被允许的,而且可以直接改变private字段(不是final按理是可以改变),这与之前的理解有点相背. 接下来试图整理下Google来的结论: ...

  7. antd做form表单的组件共用,利用mapPropsToFields填写默认值

    做单页应用,不管是用Vue还是React,或者其他,有一个重要的原则,就是:组件重用. 既然组件可以重用,那么当添加一个信息,和修改该信息的布局必然是一致的,这时候,最好的方法自然是利用同一个组件,在 ...

  8. python经典小程序集锦(一) 实现九九乘法表

    本篇文章主要是收集整理一些小程序以供大家娱乐,或者是在面试的时候使用到.文章会持续更新,希望大家收藏关注哦. 1.代码实现过程 for i in range(1, 10): for j in rang ...

  9. DPDK latencystats库使用方案

    初始化 注意务必调用 rte_metrics_init /* init latency stats */ /* @TODO should we remove this in product env? ...

  10. redis 命令行操作报错

    向redis集群写数据抛异常:(error) MOVED 15342 2001:fecc:0:616::34:6383 原因是启动redis-cli时未以集群方式启动,即后面要加上 -c redis- ...