springboot 获取当前日期_SpringBoot - 实用工具类库common-util使用详解2(时间工具类:DateTimeUtil)...

本文详细介绍了SpringBoot实用工具类库common-util中的DateTimeUtil,提供了获取当前时间、日期转换、时间戳操作、计算日期差、判断闰年、获取某月天数等丰富的日期时间操作方法。

二、日期时间工具类(DateTimeUtil)

1,基本介绍

DateTimeUtil是对时间转换操作的统一封装,首先其内部定义一些常用的时间格式表达式,具体如下:

public static final String DATE_FORMAT_MINITE = "yyyy-MM-dd HH:mm";

public static final String DATE_FORMAT_DAY = "yyyy-MM-dd";

public static final String DATE_FORMAT_SECOND = "yyyy-MM-dd HH:mm:ss";

public static final String DATE_FORMAT_SECOND_12 = "yyyy-MM-dd hh:mm:ss";

public static final String DATE_FORMAT_MILLISECOND = "yyyy-MM-dd HH:mm:ss.SSS";

public static final String DATE_FORMAT_CHINESE = "yyyy年MM月dd日";

public static final String DATE_FORMAT_CHINESE_SECONDE = "yyyy年MM月dd日 HH:mm:ss";

public static final String DATE_FORMAT_CHINESE_WEEK_SECONDE = "yyyy年MM月dd日 E HH:mm:ss";

public static final String YYYYMMDD = "yyyyMMdd";

public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";

public static final String YYYYMMDDHHMMSSSSS = "yyyyMMddHHmmssSSS";

public static final long DAY_MS = 86400000L;

private final static String[] WEEK_ARR = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};

2,获取当前时间

(1)getNowTime()方法返回当前 long类型的毫秒时间戳:

long now = DateTimeUtil.getNowTime(); // 1587112759766

(2)nowTimeStamp()方法用于获取当前 Timestamp时间戳(Timestamp是 Date的子类)

Timestamp now = DateTimeUtil.nowTimeStamp(); // 2020-04-17 16:41:22.161

(3)nowStrTime()方法可以获取当前时间字符串(可以指定格式,如果不指定的话则默认为 "yyyy-MM-dd HH:mm:ss" 形式)

String str1 = DateTimeUtil.nowStrTime(); // 2020-04-17 14:31:01

String str2 = DateTimeUtil.nowStrTime(DateTimeUtil.DATE_FORMAT_DAY); // 2020-04-17

3,Date 转 String(dateToStr)

使用 dateToStr方法可以将指定 Date转化成指定格式的字符串时间:

String str = DateTimeUtil.dateToStr(new Date(), DateTimeUtil.DATE_FORMAT_SECOND);

System.out.println(str);

8fdadebae840711f5da6fa6cbbdef96f.png

4,String 转 Date(strToDate)

strToDate方法用于将字符串时间转化成 Date。

注意:不知为何从1.7.1版本开始,转换时字符串“时分秒”部分都会变成 00:00:00(年月日正常),如最新版本还未修正,建议改用 1.7版本。

Date date = DateTimeUtil.strToDate("2020-04-17 14:22:10", DateTimeUtil.DATE_FORMAT_SECOND);

5,毫秒时间(Long)与 String 相互转换

(1)long2Str方法可以将毫秒时间格式化为字符串时间(如果不指定格式则默认使用“yyyy年MM月dd日”形式)。

long now = DateTimeUtil.getNowTime();

String str1 = DateTimeUtil.long2Str(now); // 2020年04月17日

String str2 = DateTimeUtil.long2Str(now, DateTimeUtil.DATE_FORMAT_SECOND); //2020-04-17 15:47:57

(2)strToLong方法可以将字符串格式的时间转化成 long型的时间戳:

long date = DateTimeUtil.strToLong(DateTimeUtil.DATE_FORMAT_SECOND,"2020-04-17 14:22:10"); //1587104530000

6,计算两个日期相差天数(getDistanceOfTwoDate)

注意:计算结果向下取整,比如实际相差1.5 天会返回 1。

Date date1 = DateTimeUtil.strToDate("2020-04-17 14:22:10", DateTimeUtil.DATE_FORMAT_SECOND);

Date date2 = DateTimeUtil.strToDate("2020-04-19 13:11:10", DateTimeUtil.DATE_FORMAT_SECOND);

long distance = DateTimeUtil.getDistanceOfTwoDate(date1, date2); // 1

7,判断是否是闰年(isLeapYear)

DateTimeUtil.isLeapYear(2000); // true

8,判断是否不是同一天(isDifferentDay)

isDifferentDay()方法用于判断传入的两个时间是否是不同天,如果不是同一天返回 true,如果是同一天则返回 false。

isDifferentDay(Calendar calendar1, Calendar calendar2) 方法用于判断传入的两个 Calendar是否不是同一天

isDifferentDay(Timestamp timestamp0, Timestamp timestamp1)方法用于判断传入的两个时间戳是否不是同一天

long now = DateTimeUtil.getNowTime();

long nextDay = DateTimeUtil.setTimeToNextDay0H0M0S(now); // 明天的00:00:00

Boolean isDifferent1 = DateTimeUtil.isDifferentDay(now, nextDay); // true

Boolean isDifferent2 = DateTimeUtil.isDifferentDay(now, nextDay-1); // false

9,获取某月天数

(1)getCurrentMonthDays()方法用于获取本月的天数,返回 int类型:

int num = DateTimeUtil.getCurrentMonthDays(); // 30

(2)getCurrentMonthDays(Timestamp stamp)方法用于获取传入时间所在月份的天数,返回 int类型:

int num = DateTimeUtil.getCurrentMonthDays(DateTimeUtil.nowTimeStamp()); // 30

10,获取第一天、最后一天

getFirstDayOfCurrentWeek(Timestamp stamp) 方法根据传入时间获取所属周的第一天(0HOMOS)根据中国习惯将星期一当做第一天。

getFirstDayOfCurrentWeek(long ms) 方法根据传入时间获取所属周的第一天(0HOMOS)根据中国习惯将星期一当做第一天。

getLastDayOfCurrentWeek(Timestamp stamp) 方法根据时间获取所属周的最后一天,星期天(中国习惯),返回 long型时间戳

getFirstDayOfCurrentQuarter(long ms) 方法根据时间的得到所对应季度的第一天(0H0M0S),返回 long型时间戳

getFirstDayOfNextQuarter(long ms) 方法根据时间获取下一个季度的第一天(0H0M0S),返回 long型时间戳

long now = DateTimeUtil.getNowTime(); // 1587114101560

long next = DateTimeUtil.getFirstDayOfNextQuarter(now); // 1593532800000

System.out.println(DateTimeUtil.long2Str(now, DateTimeUtil.DATE_FORMAT_SECOND)); // 2020-04-17 17:00:53

System.out.println(DateTimeUtil.long2Str(next, DateTimeUtil.DATE_FORMAT_SECOND)); // 2020-07-01 00:00:00

11,将时间戳重置到 0 时 0 分 0 秒

具体方法如下,它们的使用场景为需要精确根据时间范围来查找数据。比如在高并发昼夜高频使用的系统中,如果将时间重置到 23:59:59 来查询并不是可行方法,因为每一毫秒都可能有数据写入。

setTimeToNextDay0H0M0S(Timestamp time):该方法用于将传入时间戳重置到它的下一天的 0 时 0 分0 秒,该方法重置时间返回 long型的时间戳。

setToNextDay0H0M0SExceptToday(Timestamp stamp):该方法用于将传入 long时间戳重置到它的下一天的 0 时0 分0 秒,当传入的时间今天则不进行重置。该方法重置时间后返回 long型的时间戳。

setTimeToNextDay0H0M0S(long millis):该方法用于将传入 long时间戳重置到它的下一天的 0时0 分 0 秒,该方法重置时间后返回 long型的时间戳

setToNextDay0H0M0SExceptToday(long millis):该方法用于将传入 long时间戳重置到它的下一天的 0 时 0 分 0 秒,当传入的时间今天则不进行重置。该方法重置时间后返回 long型的时间戳。

setTimeTo0H0M0S(Timestamp time):该方法将时间戳重置到 0 时 0 分 0 秒,该方法重置时间后返回 long型的时间戳

setTimeTo0H0M0S(long millis):该方法将 long型的时间戳重置到 0时 0 分0 秒,该方法重置时间后返回 long型的时间戳

setTimeToLastDay0H0M0S(Timestamp time):该方法用于将时间戳重置到它的上一天 0时0 分0 秒,该方法重置时间后返回 long型的时间戳

setToFirstDayOfCurrentYear(long millis):该方法将时间设置为当年第一天,并且将时分秒全部置0

setToFirstDayOfNextYear(long millis):该方法将时间设置为下一年的第一天,返回 long型时间戳

setToFirstDayOfCurrentMonth(long millis):该方法将时间重置为传入时间当前月的第一天,并且将时分秒全置 0,返回 long型时间戳

setToFirstDayOfLastMonth(long millis):该方法将时间重置到上月的第一天,返回 long型时间戳

setToFirstDayOfNextMonth(long millis):该方法方法将时间重置为传入时间下月的第一天,并将时分秒全置 0,返回 long型时间戳

long begin = DateTimeUtil.setTimeTo0H0M0S(DateTimeUtil.nowTimeStamp());

long end = DateTimeUtil.setTimeToNextDay0H0M0S(DateTimeUtil.nowTimeStamp());

System.out.println(end-begin); // 86400000 (一天86400000毫秒)

12,获取同期时间

setToLastMonthCommonDay(long ms) 方法根据 long型时间戳获取上月同期的时间戳,返回 long 型时间戳。如果传入的时间是月末,处理后仍然是月末(例如:5月 31号,上月同期是 4月30号)

setToLastYearCommonDay(long millis) 方法根据传入的时间戳获取去年同期的时间戳,返回 long 型时间戳

setToNextYearCommonDay(long millis) 方法根据时间获取下一年的同一天,返回 long 型时间戳

long now = DateTimeUtil.getNowTime(); // 1587115155141

long before = DateTimeUtil.setToLastMonthCommonDay(now); // 1584436755141

DateTimeUtil.long2Str(now, DateTimeUtil.DATE_FORMAT_SECOND); // 2020-04-17 17:19:15

DateTimeUtil.long2Str(before, DateTimeUtil.DATE_FORMAT_SECOND); // 2020-03-17 17:19:15

13,根据时间获取是周几(getDayOfWeek)

getDayOfWeek方法可以知道传入时间是周几,根据中国习惯将星期一当做第一天:

long now = DateTimeUtil.getNowTime();

long day = DateTimeUtil.getDayOfWeek(now); // 6 (表示周六)

14,判断是否是今天、今年

isToday方法可以判断传入时间是否是今天,isCurrentYear方法可以判断传入时间是否是今年。

long now = DateTimeUtil.getNowTime();

Boolean isToday = DateTimeUtil.isToday(now); // true

Boolean isCurrentYear = DateTimeUtil.isCurrentYear(now); // true

15,社交化友好时间显示(friendlyTime)

目前 friendlyTime方法可以根据传入的时间返回这几种格式的字符串:xx 分钟前、xx小时前、昨天、前天、xx 天前、xx年 xx月 xx日(距今超过 10天的话)。

long now = DateTimeUtil.getNowTime();

long yesterday = now - DateTimeUtil.DAY_MS * 1;

long lastWeek = now - DateTimeUtil.DAY_MS * 7;

long lastMonth = now - DateTimeUtil.DAY_MS * 30;

String nowStr = DateTimeUtil.friendlyTime(now); // 1分钟前

String yesterdayStr = DateTimeUtil.friendlyTime(yesterday); // 昨天

String lastWeekStr = DateTimeUtil.friendlyTime(lastWeek); // 7天前

String lastMonthStr = DateTimeUtil.friendlyTime(lastMonth); // 2020年03月19日

16,计算年龄(getAge)

getAge方法可以根据传入的出生日期计算出现在的年龄:

Date birthDay1 = DateTimeUtil.strToDate("2000-04-17", DateTimeUtil.DATE_FORMAT_DAY);

Date birthDay2 = DateTimeUtil.strToDate("2000-05-17", DateTimeUtil.DATE_FORMAT_DAY);

int age1 = DateTimeUtil.getAge(birthDay1.getTime()); //20

int age2 = DateTimeUtil.getAge(birthDay2.getTime()); //19

17,从身份证号中提取生日(getBirthdayFormIdCard)

Timestamp birth = DateTimeUtil.getBirthdayFormIdCard("456227202009190017"); //2020-09-19 00:00:00.0

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值