java HHmm_java时间工具类

这个Java工具类提供了各种日期时间操作方法,如获取指定月数、天数、分钟、小时后的日期,格式化日期,计算两个日期之间的秒数差,获取一天的开始和结束时间,判断日期交叉等。还包含了获取当月第一天和最后一天,以及当月开始和结束时间戳的功能。
摘要由CSDN通过智能技术生成

package com.yql.mytest.utils;

import java.text.DateFormat;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.time.Instant;

import java.time.LocalDateTime;

import java.time.LocalTime;

import java.time.ZoneId;

import java.time.temporal.ChronoUnit;

import java.util.Calendar;

import java.util.Date;

import java.util.TimeZone;

public class DateUtils {

/**

* 返回指定月数的日期

*

* @param date

* @param month

* @return

* @author guos

* @date 2019/4/13 16:26

**/

public static Date getExpireMonth(Date date, int month) {

Calendar cal = Calendar.getInstance();

cal.setTime(date);

cal.add(Calendar.MONTH, month);

return cal.getTime();

}

/**

* 返回指定天数的日期

*

* @param date

* @param day

* @return

*/

public static Date getExpireDate(Date date, int day) {

Calendar cal = Calendar.getInstance();

cal.setTime(date);

cal.add(Calendar.DAY_OF_MONTH, day);

return cal.getTime();

}

/**

* 返回指定分钟后的日期

* @param date

* @param minute

* @return

*/

public static Date getExpireMinute(Date date, int minute) {

Calendar cal = Calendar.getInstance();

cal.setTime(date);

cal.add(Calendar.MINUTE, minute);

return cal.getTime();

}

/**

*

Title: getExpireHour

*

Description: 返回指定日期多少小时后的时间

*

* @param date

* @param hour

* @return

* @author yql

*/

public static Date getExpireHour(Date date, int hour) {

Calendar cal = Calendar.getInstance();

cal.setTime(date);

cal.add(Calendar.HOUR_OF_DAY, hour);

return cal.getTime();

}

/**

* 根据指定参数kind,获取指定类型的Date日期(年月日)

*

* @param kind 指定参数

* @return Date 指定类型的Date

*/

public static Date getFormatDate(Date date, int kind) {

String currentDateStr = formatDate(date, kind);

return toDate(currentDateStr, kind);

}

/**

* 根据kind输出string格式

*

* @param date

* @param kind

* @return

*/

public static String formatDate(Date date, int kind) {

SimpleDateFormat sdf = new SimpleDateFormat(getDateFormat(kind));

return sdf.format(date);

}

public static String formatCurrentDate(int kind) {

SimpleDateFormat sdf = new SimpleDateFormat(getDateFormat(kind));

return sdf.format(new Date());

}

public static Date toDate(String dateText, int kind) {

String format = getDateFormat(kind);

if (dateText == null) {

return null;

}

DateFormat df = null;

try {

if (format == null) {

df = new SimpleDateFormat();

} else {

df = new SimpleDateFormat(format);

}

df.setLenient(false);

return df.parse(dateText);

} catch (ParseException e) {

return null;

}

}

private static String getDateFormat(int kind) {

String[] format = {"yyyy-MM-dd", // 0

"yyyy-MM-dd HH:mm:ss", // 1

"yyyy",// 2

"M",// 3

"dd", // 4

"yyyy年M月d日H点m分", // 5

"yyyy年M月d日", // 6

"H点m分", // 7

"yyyy/MM/dd HH:mm", // 8

"HH",// 9

"mm",// 10

"yyyyMMdd", // 11

"yyyyMMddHHmmss", // 12

"yyyy-MM-dd 23:59:59", // 13

"HH:mm:ss", // 14

"yyyy/MM/dd HH:mm:ss", // 15

"yyyy/MM/dd HH:mm",//16

"HHmmss",//17,

"HH:mm:ss", //18

"mmss", //19

"HH:mm", //20

"yyyy-MM-dd HH:mm", //21

"yyyyMMddHHmm", // 22

};

return format[kind];

}

/**

* 计算两个日期的秒数之差

*

* @param oldDate

* @param newDate

* @return

*/

public static long secondsBetween(Date oldDate, Date newDate) {

long between = (newDate.getTime() / 1000 - oldDate.getTime() / 1000);//除以1000是为了转换成秒

return between;

}

/**

* 计算传入时间距离24点剩余秒数

*

* @param currentDate

* @return

*/

public static Integer getRemainSecondsOneDay(Date currentDate) {

LocalDateTime midnight = LocalDateTime.ofInstant(currentDate.toInstant(),

ZoneId.systemDefault()).plusDays(1).withHour(0).withMinute(0)

.withSecond(0).withNano(0);

LocalDateTime currentDateTime = LocalDateTime.ofInstant(currentDate.toInstant(),

ZoneId.systemDefault());

long seconds = ChronoUnit.SECONDS.between(currentDateTime, midnight);

return (int) seconds;

}

/**

* 获得某天最小时间 2018-01-01 00:00:00

*

* @param date

* @return

*/

public static Date getMinTimeOfDay(Date date) {

if (date == null) {

return null;

}

LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()),

ZoneId.systemDefault());

LocalDateTime startOfDay = localDateTime.with(LocalTime.MIN);

return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());

}

/**

* 获得某天最大时间 2018-01-01 23:59:59

*

* @param date

* @return

*/

public static Date getMaxTimeOfDay(Date date) {

if (date == null) {

return null;

}

LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()),

ZoneId.systemDefault());

LocalDateTime endOfDay = localDateTime.with(LocalTime.MAX);

return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());

}

/**

* 判断两个时间段的交集

*

* @param leftStartDate

* @param leftEndDate

* @param rightStartDate

* @param rightEndDate

* @return

* @author guos

* @date 2019/7/16 14:57

**/

public static boolean isDateCross(Date leftStartDate, Date leftEndDate, Date rightStartDate, Date rightEndDate) {

return

((leftStartDate.getTime() >= rightStartDate.getTime())

&& leftStartDate.getTime() < rightEndDate.getTime())

||

((leftStartDate.getTime() > rightStartDate.getTime())

&& leftStartDate.getTime() <= rightEndDate.getTime())

||

((rightStartDate.getTime() >= leftStartDate.getTime())

&& rightStartDate.getTime() < leftEndDate.getTime())

||

((rightStartDate.getTime() > leftStartDate.getTime())

&& rightStartDate.getTime() <= leftEndDate.getTime());

}

/**

* 获取本月第一天

* @return

*/

public static Date getMindate(){

Calendar calendar = Calendar.getInstance();

calendar.setTime(new Date());

calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));

return calendar.getTime();

}

/**

* 获取本月最后一天

* @return

*/

public static Date getMaxdate(){

Calendar calendar = Calendar.getInstance();

calendar.setTime(new Date());

calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));

return calendar.getTime();

}

/**

* 获取当月开始时间戳

*

* @param timeStamp 毫秒级时间戳

* @param timeZone 如 GMT+8:00

* @return

*/

public static Long getMonthStartTime(Long timeStamp, String timeZone) {

Calendar calendar = Calendar.getInstance();// 获取当前日期

calendar.setTimeZone(TimeZone.getTimeZone(timeZone));

calendar.setTimeInMillis(timeStamp);

calendar.add(Calendar.YEAR, 0);

calendar.add(Calendar.MONTH, 0);

calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天

calendar.set(Calendar.HOUR_OF_DAY, 0);

calendar.set(Calendar.MINUTE, 0);

calendar.set(Calendar.SECOND, 0);

calendar.set(Calendar.MILLISECOND, 0);

return calendar.getTimeInMillis();

}

/**

* 获取当月的结束时间戳

*

* @param timeStamp 毫秒级时间戳

* @param timeZone 如 GMT+8:00

* @return

*/

public static Long getMonthEndTime(Long timeStamp, String timeZone) {

Calendar calendar = Calendar.getInstance();// 获取当前日期

calendar.setTimeZone(TimeZone.getTimeZone(timeZone));

calendar.setTimeInMillis(timeStamp);

calendar.add(Calendar.YEAR, 0);

calendar.add(Calendar.MONTH, 0);

calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));// 获取当前月最后一天

calendar.set(Calendar.HOUR_OF_DAY, 23);

calendar.set(Calendar.MINUTE, 59);

calendar.set(Calendar.SECOND, 59);

calendar.set(Calendar.MILLISECOND, 999);

return calendar.getTimeInMillis();

}

public static void main(String[] a){

System.out.println("当天时间3天后的时间:"+DateUtils.getExpireDate(new Date(),3));

Long nowTime = new Date().getTime();

Long monthStartTime = DateUtils.getMonthStartTime(nowTime,"GMT+8:00");

System.out.println("传入时间当月的开始时间monthStartTime:"+monthStartTime);

Long monthEndTime = DateUtils.getMonthEndTime(nowTime,"GMT+8:00");

System.out.println("传入时间当月的结束时间monthEndTime:"+monthEndTime);

String monthStartTimeStr = DateUtils.formatDate(new Date(monthStartTime),1);

System.out.println("传入时间当月的开始时间monthStartTimeStr:"+monthStartTimeStr);

String monthEndTimeStr = DateUtils.formatDate(new Date(monthEndTime),12);

System.out.println("传入时间当月的结束时间monthEndTimeStr:"+monthEndTimeStr);

Date minDate = DateUtils.getMinTimeOfDay(new Date());

System.out.println("传入时间当天的最小时间minDate:"+minDate);

Date maxDate = DateUtils.getMaxTimeOfDay(new Date());

System.out.println("传入时间当天的最大时间maxDate:"+maxDate);

System.out.println("距离当天24点剩余秒数:"+DateUtils.getRemainSecondsOneDay(new Date()));

}

}

执行结果:

当天时间3天后的时间:Mon Jan 20 15:37:38 CST 2020

传入时间当月的开始时间monthStartTime:1577808000000

传入时间当月的结束时间monthEndTime:1580486399999

传入时间当月的开始时间monthStartTimeStr:2020-01-01 00:00:00

传入时间当月的结束时间monthEndTimeStr:20200131235959

传入时间当天的最小时间minDate:Fri Jan 17 00:00:00 CST 2020

传入时间当天的最大时间maxDate:Fri Jan 17 23:59:59 CST 2020

距离当天24点剩余秒数:30141

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值