package com.hx.util;
|
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.Calendar;
|
import java.util.Date;
|
import java.util.Locale;
|
|
public class DateUtil {
|
|
private static SimpleDateFormat Format_1 = new SimpleDateFormat("yyyyMMdd");
|
private static SimpleDateFormat Format_2 = new SimpleDateFormat("yyyyMMddHHmmss");
|
private static SimpleDateFormat Format_3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
private static SimpleDateFormat Format_4 = new SimpleDateFormat("yyyy-MM-dd");
|
private static SimpleDateFormat Format_5 = new SimpleDateFormat("HH:mm:ss");
|
private static SimpleDateFormat Format_6 = new SimpleDateFormat("yyyyMM");
|
private static SimpleDateFormat Format_7 = new SimpleDateFormat("MM月dd日 HH:mm");
|
private static SimpleDateFormat Format_8 = new SimpleDateFormat("yyyy年MM月");
|
private static SimpleDateFormat Format_9 = new SimpleDateFormat("MM-dd");
|
private static SimpleDateFormat Format_10 = new SimpleDateFormat("yyyy年MM月dd日");
|
private static SimpleDateFormat Format_11 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
|
private static SimpleDateFormat Format_12 = new SimpleDateFormat("yyyyMMddHHmm");
|
private static SimpleDateFormat Format_13 = new SimpleDateFormat("yyyy/MM/dd");
|
private static SimpleDateFormat Format_14 = new SimpleDateFormat("yyyy-MM");
|
private static SimpleDateFormat Format_15 = new SimpleDateFormat("yyyyMMddHHmmssSSS");
|
private static SimpleDateFormat Format_16 = new SimpleDateFormat("yyyy/MM/dd HH:mm");
|
private static SimpleDateFormat Format_17 = new SimpleDateFormat("HH:mm");
|
|
/**时间格式转化iso8601
|
* @param date 时间
|
* @return 返回的时间格式字符串
|
*/
|
public static String dateFormatISO8601(Date date) {
|
if(!SimpleTool.checkNotNull(date)){
|
return "";
|
}
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");//设置日期格式
|
return df.format(date);
|
}
|
|
/**时间格式转化
|
* @param date 时间
|
* @param format 时间格式
|
* @return 返回的时间格式字符串
|
*/
|
public static String dateFormat(Date date, String format) {
|
if(!SimpleTool.checkNotNull(date)){
|
return "";
|
}
|
SimpleDateFormat df = new SimpleDateFormat(format);//设置日期格式
|
return df.format(date);
|
}
|
|
/**时间戳转时间
|
* @param timestamp 时间戳
|
* @param format 时间格式
|
* @return 返回的时间格式字符串
|
*/
|
public static Date timestampToDate(long timestamp, String format) {
|
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
String sd = sdf.format(new Date(timestamp)); // 时间戳转换成时间
|
return DateUtil.parseString(sd,"yyyy-MM-dd HH:mm:ss");
|
}
|
|
/**
|
* 转换成yyyyMMdd格式的日期字符串
|
*
|
* @param date
|
* @return
|
*/
|
public static String formatDate(Date date) {
|
return Format_1.format(date);
|
}
|
|
/**
|
* 转换成yyyyMMddHHmmss格式的日期字符串
|
*
|
* @param date
|
* @return
|
*/
|
public static String formatDate_1(Date date) {
|
return Format_2.format(date);
|
}
|
|
/**
|
* 转换成yyyy-MM-dd HH:mm:ss格式的日期字符串
|
*
|
* @param date
|
* @return
|
*/
|
public static String formatDate_2(Date date) {
|
return date == null ? null : Format_3.format(date);
|
}
|
|
/**
|
* 转换成yyyy-MM-dd格式的日期字符串
|
*
|
* @param date
|
* @return
|
*/
|
public static String formatDate_3(Date date) {
|
return date != null ? Format_4.format(date) : null;
|
}
|
|
/**
|
* 转换成HH:mm:ss格式的日期字符串
|
*
|
* @param date
|
* @return
|
*/
|
public static String formatDate_4(Date date) {
|
return Format_5.format(date);
|
}
|
|
/**
|
* 转换成yyyyMM格式的日期字符串
|
*
|
* @param date
|
* @return
|
*/
|
public static String formatDate_5(Date date) {
|
return Format_6.format(date);
|
}
|
|
/**
|
* 转换成mm月dd日 HH:mm格式的日期字符串
|
*
|
* @param date
|
* @return
|
*/
|
public static String formatDate_6(Date date) {
|
return Format_7.format(date);
|
}
|
|
/**
|
* 转换成yyyy年mm月格式的日期字符串
|
*
|
* @param date
|
* @return
|
*/
|
public static String formatDate_7(Date date) {
|
return Format_8.format(date);
|
}
|
|
/**
|
* 转换成mm-dd格式的日期字符串
|
*
|
* @param date
|
* @return
|
*/
|
public static String formatDate_8(Date date) {
|
return Format_9.format(date);
|
}
|
|
/**
|
* 转换成yyyy年MM月dd日格式的日期字符串
|
*
|
* @param date
|
* @return
|
*/
|
public static String formatDate_9(Date date) {
|
return Format_10.format(date);
|
}
|
|
/**
|
* 转换成yyyyMMddHHmm格式的日期字符串
|
*
|
* @param date
|
* @return
|
*/
|
public static String formatDate_11(Date date) {
|
return Format_12.format(date);
|
}
|
|
/**
|
* 转换成yyyy年MM月dd日 HH:mm:ss格式的日期字符串
|
*
|
* @param date
|
* @return
|
*/
|
public static String formatDate_10(Date date) {
|
return Format_11.format(date);
|
}
|
|
/**
|
* 转换成yyyy/MM/dd 格式的日期字符串
|
*
|
* @param date
|
* @return
|
*/
|
public static String formatDate_13(Date date) {
|
return Format_13.format(date);
|
}
|
|
/**
|
* 转换成yyyy-MM 格式的日期字符串
|
*
|
* @param date
|
* @return
|
*/
|
public static String formatDate_14(Date date) {
|
return Format_14.format(date);
|
}
|
|
|
/**
|
* 当前时间之前的时间与当前时间相差多少秒
|
* @param startDate 当前时间之前的时间
|
* @return
|
*/
|
public static int calLastedTime(Date startDate) {
|
long nowDate = new Date().getTime();
|
long startDateTime = startDate.getTime();
|
int diffSeconds = (int) ((nowDate - startDateTime) / 1000);
|
return diffSeconds;
|
}
|
|
|
/**
|
* 转换成yyyyMMddHHmmssSSS格式的日期字符串
|
*
|
* @param date
|
* @return
|
*/
|
public static String formatDate_15(Date date) {
|
return Format_15.format(date);
|
}
|
|
/**
|
* 转换成yyyy/MM/dd HH:mm格式的日期字符串
|
*
|
* @param date
|
* @return
|
*/
|
public static String formatDate_16(Date date) {
|
return Format_16.format(date);
|
}
|
|
/**
|
* 转换成HH:mm格式的日期字符串
|
*
|
* @param date
|
* @return
|
*/
|
public static String formatDate_17(Date date) {
|
return Format_17.format(date);
|
}
|
|
/**
|
* 转换成字符串yyyyMMddHHmmss成日�?
|
*
|
* @param str
|
* @return
|
* @throws Exception
|
*/
|
public static Date parseString(String str) {
|
try {
|
return Format_2.parse(str);
|
}catch (Exception e)
|
{
|
return null;
|
}
|
}
|
|
/**
|
* 转换成字符串到指定的日期
|
*
|
* @param str
|
* @param format
|
* @return
|
* @throws Exception
|
*/
|
public static Date parseString(String str, String format) {
|
SimpleDateFormat sdf = new SimpleDateFormat(format);
|
try{
|
return sdf.parse(str);
|
}catch (Exception e)
|
{
|
return null;
|
}
|
}
|
|
/**字符串转成时间yyyy-MM-dd HH:mm:ss*/
|
public static Date parseString_1(String str)
|
{
|
try{
|
return Format_3.parse(str);
|
}catch (Exception e)
|
{
|
return null;
|
}
|
}
|
|
/**字符串转成时间yyyy-MM-dd*/
|
public static Date parseString_2(String str)
|
{
|
try{
|
return Format_4.parse(str);
|
}catch (Exception e)
|
{
|
return null;
|
}
|
}
|
|
/**时间上秒叠加
|
* @Author: ChenJiaHe
|
* @param dateTime 时间
|
* @param second 秒
|
* @return
|
*/
|
public static Date addSecond(Date dateTime,int second){
|
Calendar c = Calendar.getInstance();
|
c.setTime(dateTime);
|
c.add(Calendar.SECOND, second);
|
return c.getTime();
|
}
|
|
/**时间上分钟叠加
|
* @Author: ChenJiaHe
|
* @param dateTime 时间
|
* @param min 分钟
|
* @return
|
*/
|
public static Date addMin(Date dateTime,int min){
|
Calendar c = Calendar.getInstance();
|
c.setTime(dateTime);
|
c.add(Calendar.MINUTE, min);
|
return c.getTime();
|
}
|
|
/**时间上小时叠加
|
* @Author: ChenJiaHe
|
* @param dateTime 时间
|
* @param hour 小时
|
* @return
|
*/
|
public static Date addhour(Date dateTime,int hour){
|
Calendar c = Calendar.getInstance();
|
c.setTime(dateTime);
|
c.add(Calendar.HOUR, hour);
|
return c.getTime();
|
}
|
|
/**时间上天数叠加
|
* @Author: ChenJiaHe
|
* @param dateTime 时间
|
* @param dayNum 天数
|
* @return
|
*/
|
public static Date addDay(Date dateTime,int dayNum){
|
Calendar c = Calendar.getInstance();
|
c.setTime(dateTime);
|
c.add(Calendar.DATE, dayNum);
|
return c.getTime();
|
}
|
|
/**时间上月数叠加
|
* @Author: ChenJiaHe
|
* @param dateTime 时间
|
* @param dayNum 天数
|
* @return
|
*/
|
public static Date addMonth(Date dateTime,int dayNum){
|
Calendar c = Calendar.getInstance();
|
c.setTime(dateTime);
|
c.add(Calendar.MONTH, dayNum);
|
return c.getTime();
|
}
|
|
/**时间上年数叠加
|
* @Author: ChenJiaHe
|
* @param dateTime 时间
|
* @param dayNum 天数
|
* @return
|
*/
|
public static Date addYear(Date dateTime,int dayNum){
|
Calendar c = Calendar.getInstance();
|
c.setTime(dateTime);
|
c.add(Calendar.YEAR, dayNum);
|
return c.getTime();
|
}
|
|
/**
|
* 转换成字符串到指定的日期
|
*
|
* @param date
|
* @param format
|
* @return
|
* @throws Exception
|
*/
|
public static String formatDate(Date date, String format) {
|
if (date == null) {
|
return null;
|
}
|
|
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.CHINA);
|
return sdf.format(date);
|
}
|
|
/**日期转星期
|
* @param dateTime 字符串时间
|
* @param format 字符串时间格式
|
* @param returnType 返回类型 0星期几1周几
|
* @return 数据
|
*/
|
public static String dateToWeek(String dateTime,String format,Integer returnType) throws ParseException {
|
SimpleDateFormat f = new SimpleDateFormat(format);
|
String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
if(SimpleTool.checkNotNull(returnType)&&returnType==1){
|
weekDays = new String[]{"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
|
}
|
Calendar cal = Calendar.getInstance(); // 获得一个日历
|
Date datet = null;
|
datet = f.parse(dateTime);
|
cal.setTime(datet);
|
|
int w = cal.get(Calendar.DAY_OF_WEEK) - 1; // 指示一个星期中的某天。
|
if (w < 0)
|
w = 0;
|
return weekDays[w];
|
}
|
|
/**日期转星期
|
* @param dateTime 时间
|
* @param returnType 返回类型 0星期几1周几
|
* @return 数据
|
*/
|
public static String dateToWeek(Date dateTime,Integer returnType) {
|
String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
if(SimpleTool.checkNotNull(returnType)&&returnType==1){
|
weekDays = new String[]{"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
|
}
|
Calendar cal = Calendar.getInstance(); // 获得一个日历
|
cal.setTime(dateTime);
|
|
int w = cal.get(Calendar.DAY_OF_WEEK) - 1; // 指示一个星期中的某天。
|
if (w < 0)
|
w = 0;
|
return weekDays[w];
|
}
|
|
/**
|
* 获取两个时间相差分钟数
|
* @param startTime 开始时间
|
* @param endTime 结束时间
|
* @return 分钟
|
*/
|
public static long differMinute(Date startTime, Date endTime) {
|
long NTime = startTime.getTime();
|
long OTime = endTime.getTime();
|
return (NTime - OTime) / 1000 / 60;
|
}
|
|
/**
|
* 获取两个时间相差分钟数
|
* @param startTime 开始时间
|
* @param endTime 结束时间
|
* @param remainder 余数进1
|
* @return 分钟
|
*/
|
public static int differMinute(Date startTime, Date endTime,boolean remainder) {
|
BigDecimal sTime = new BigDecimal(startTime.getTime());
|
BigDecimal eTime = new BigDecimal(endTime.getTime());
|
eTime = eTime.subtract(sTime).setScale(0,RoundingMode.HALF_UP);
|
if(remainder){
|
eTime = eTime.divide(BigDecimal.valueOf(60000.0)).setScale(0, RoundingMode.UP);
|
}else{
|
eTime = eTime.divide(BigDecimal.valueOf(60000.0)).setScale(0, RoundingMode.DOWN);
|
}
|
return eTime.intValue();
|
}
|
|
/**
|
* endTime比startTime多的天数
|
* @param startTime 最小时间
|
* @param endTime 最大时间
|
* @return 返回
|
*/
|
public static Integer differDay(Date startTime,Date endTime){
|
Calendar cal1 = Calendar.getInstance();
|
cal1.setTime(startTime);
|
|
Calendar cal2 = Calendar.getInstance();
|
cal2.setTime(endTime);
|
int day1= cal1.get(Calendar.DAY_OF_YEAR);
|
int day2 = cal2.get(Calendar.DAY_OF_YEAR);
|
|
int year1 = cal1.get(Calendar.YEAR);
|
int year2 = cal2.get(Calendar.YEAR);
|
if(year1 != year2) { //同一年
|
int timeDistance = 0 ;
|
for(int i = year1 ; i < year2 ; i ++) {
|
if(i%4==0 && i%100!=0 || i%400==0) {//闰年
|
timeDistance += 366;
|
}
|
else {//不是闰年
|
timeDistance += 365;
|
}
|
}
|
|
return timeDistance + (day2-day1) ;
|
}
|
else { //不同年
|
System.out.println("判断day2 - day1 : " + (day2-day1));
|
return day2-day1;
|
}
|
}
|
|
/**判断两个时间是不是同一天*/
|
public static boolean timeEqual(Date startTime,Date endTime){
|
if(startTime == null || endTime==null){
|
return false;
|
}
|
boolean status = false;
|
if(formatDate(startTime,"yyyyMMdd").equals(formatDate(endTime,"yyyyMMdd"))){
|
status = true;
|
}
|
return status;
|
}
|
|
/**把秒转换成X天X时X分X秒*/
|
public static String getChineseStr(Integer second) {
|
int day = 24 * 60 * 60;
|
int hour = 60 * 60;
|
int min = 60;
|
|
int dayNum = second / day;
|
int hourNum = second % day / hour;
|
int minNum = second % day % hour / min;
|
second = second % day % hour % min;
|
|
String str = dayNum > 0 ? dayNum + "天" : "";
|
str += hourNum > 0 ? hourNum + "时" : "";
|
str += minNum > 0 ? minNum + "分" : "";
|
str += second + "秒";
|
|
return str;
|
}
|
|
/**
|
* 针对str格式的时间做转换 格式为"xx:xx"
|
* @param time 传入的时间
|
* @return 返回分钟如果10:25,则返回625
|
*/
|
public static int getMinuteNum(String time){
|
|
if(!StringUtils.isEmpty(time))
|
{
|
String[] arr = time.split(":");
|
if(arr != null && arr.length == 2)
|
{
|
return Integer.parseInt(arr[0]) * 60 + Integer.parseInt(arr[1]);
|
}
|
}
|
|
return 0;
|
}
|
|
/**
|
* 获取当前月的开始时间
|
* @param time 时间
|
* @return 返回时间 格式yyyy-MM-dd 00:00:00
|
*/
|
public static Date getMonthStart(Date time) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(time);
|
calendar.set(Calendar.DAY_OF_MONTH, 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.getTime();
|
}
|
|
/**
|
* 获取当前月的开始时间
|
*
|
* @param num 0拿取当月,正代表后,负代表前,值为几个(月)
|
* @return 返回时间 格式yyyy-MM-dd 00:00:00
|
*/
|
public static String getMonthStart(Integer num) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.add(Calendar.MONTH, num);
|
calendar.set(Calendar.DAY_OF_MONTH, 1);
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
calendar.set(Calendar.MINUTE, 0);
|
calendar.set(Calendar.SECOND, 0);
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
|
return sdf.format(calendar.getTime());
|
}
|
|
/**
|
* 获取当前月的结束时间
|
* @param date 点前时间
|
* @return 返回时间 格式yyyy-MM-dd 23:59:59999
|
*/
|
public static Date getMonthEnd(Date date) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
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.getTime();
|
}
|
|
/**
|
* 获取当前月的结束时间,没有毫秒
|
* @param date 点前时间
|
* @return 返回时间 格式yyyy-MM-dd 23:59:59
|
*/
|
public static Date getMonthEndNoMillisecond(Date date) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
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);
|
return calendar.getTime();
|
}
|
|
/**
|
* 获取当前月的结束时间
|
* @param num 0拿取当月,正代表后,负代表前,值为几个(月)
|
* @return 返回时间 格式yyyy-MM-dd 23:59:59
|
*/
|
public static String getMonthEnd(Integer num) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.add(Calendar.MONTH, num);
|
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);
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
|
return sdf.format(calendar.getTime());
|
}
|
|
/**
|
* 获取当前年的开始时间
|
* @param time 时间
|
* @return 返回时间 格式yyyy-MM-dd 00:00:00
|
*/
|
public static Date getYearStart(Date time) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(time);
|
calendar.set(Calendar.MONTH, 0);
|
calendar.set(Calendar.DAY_OF_MONTH, 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.getTime();
|
}
|
|
/**
|
* 获取当前年的结束时间
|
* @param time 时间
|
* @return 返回时间 格式yyyy-MM-dd 23:59:59999
|
*/
|
public static Date getYearEnd(Date time) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(time);
|
calendar.set(Calendar.MONTH, 11);
|
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DATE));
|
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
calendar.set(Calendar.MINUTE, 59);
|
calendar.set(Calendar.SECOND, 59);
|
calendar.set(Calendar.MILLISECOND,999);
|
return calendar.getTime();
|
}
|
|
/**
|
* 获取当前年的结束时间,没有毫秒
|
* @param time 时间
|
* @return 返回时间 格式yyyy-MM-dd 23:59:59
|
*/
|
public static Date getYearEndNoMillisecond(Date time) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(time);
|
calendar.set(Calendar.MONTH, 11);
|
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DATE));
|
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
calendar.set(Calendar.MINUTE, 59);
|
calendar.set(Calendar.SECOND, 59);
|
return calendar.getTime();
|
}
|
|
|
/**这天的开始时间
|
* 日期2000-01-01变2000-01-01 00:00:00
|
*/
|
public static String dayToStart(Date date) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
calendar.set(Calendar.MINUTE, 0);
|
calendar.set(Calendar.SECOND, 0);
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
|
return sdf.format(calendar.getTime());
|
}
|
|
/**这天的最后时间
|
* 日期2000-01-01变2000-01-01 23:59:59
|
*/
|
public static String dayToEnd(Date date) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
calendar.set(Calendar.MINUTE, 59);
|
calendar.set(Calendar.SECOND, 59);
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
|
return sdf.format(calendar.getTime());
|
}
|
|
/**这天的开始时间
|
* 日期2000-01-01变2000-01-01 00:00:00
|
*/
|
public static Date dayToStartDate(Date date) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
calendar.set(Calendar.MINUTE, 0);
|
calendar.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.MILLISECOND, 0);
|
return calendar.getTime();
|
}
|
|
/**这天的最后时间
|
* 日期2000-01-01变2000-01-01 23:59:59999
|
*/
|
public static Date dayToEndDate(Date date) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
calendar.set(Calendar.MINUTE, 59);
|
calendar.set(Calendar.SECOND, 59);
|
calendar.set(Calendar.MILLISECOND, 999);
|
return calendar.getTime();
|
}
|
|
/**这天的最后时间,没有毫秒
|
* 日期2000-01-01变2000-01-01 23:59:59
|
*/
|
public static Date dayToEndDateNoMillisecond(Date date) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
calendar.set(Calendar.MINUTE, 59);
|
calendar.set(Calendar.SECOND, 59);
|
return calendar.getTime();
|
}
|
|
/**获取月份的天数
|
* @param date 时间
|
* @return 月份的天数
|
*/
|
public static int getMonthDays(Date date) {
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(date);
|
cal.set(Calendar.DATE, 1);
|
cal.roll(Calendar.DATE, -1);
|
return cal.getActualMaximum(Calendar.DATE);
|
}
|
|
/**获取月份的天数
|
* @param year 年份
|
* @param month 月份
|
* @return 月份的天数
|
*/
|
public static int getMonthDays(int year, int month) {
|
Calendar cal = Calendar.getInstance();
|
cal.set(Calendar.YEAR, year);
|
cal.set(Calendar.MONTH, (month - 1));
|
cal.set(Calendar.DATE, 1);
|
cal.roll(Calendar.DATE, -1);
|
return cal.getActualMaximum(Calendar.DATE);
|
}
|
|
/**获取月份的天数
|
* @param yearMonth 年月
|
* @param format 时间格式
|
* @return 返回
|
*/
|
public static int getMonthDays(String yearMonth,String format) {
|
SimpleDateFormat sdf = new SimpleDateFormat(format);
|
Calendar calendar = Calendar.getInstance();
|
try {
|
calendar.setTime(sdf.parse(yearMonth));
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
|
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
|
}
|
|
/**当天多少点前
|
* @param date 时间
|
* @param num 多少点前,不含当点前,24小时制
|
* @return 月份的天数
|
*/
|
public static boolean getFrontMinute(Date date,int num) {
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(date);
|
cal.set(Calendar.HOUR_OF_DAY, num-1);
|
cal.set(Calendar.MINUTE, 59);
|
cal.set(Calendar.SECOND, 59);
|
|
return date.compareTo(cal.getTime()) < 1;
|
}
|
|
/**
|
* 获得某个日期的当天某点
|
* 例如:2022-12-26 11:20:00 -> 2022-12-26 13:00:00
|
* @param num 24小时
|
*/
|
public static String getHourDayTime(Date date,int num) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
calendar.set(Calendar.HOUR_OF_DAY, num);
|
calendar.set(Calendar.MINUTE, 0);
|
calendar.set(Calendar.SECOND, 0);
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
|
return sdf.format(calendar.getTime());
|
}
|
|
/**
|
* 获取时间当月剩余天数
|
* */
|
public static Integer getMonthSurplus(Date date) {
|
Calendar month = Calendar.getInstance();
|
month.setTime(new Date());
|
month.set(Calendar.DATE, 1);
|
month.roll(Calendar.DATE, -1);
|
return month.getActualMaximum(Calendar.DATE) - Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
|
}
|
|
/**获取当前时间所在周的周一00:00:00*/
|
public static Date getMonday(Date date) {
|
Calendar calendar = Calendar.getInstance(Locale.CHINA);
|
calendar.setTime(date);
|
//以周一为首日
|
calendar.setFirstDayOfWeek(Calendar.MONDAY);
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
calendar.set(Calendar.MINUTE, 0);
|
calendar.set(Calendar.SECOND, 0);
|
//周一
|
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
|
return calendar.getTime();
|
}
|
|
/**
|
* 根据出生年月日计算年龄
|
* @param birth
|
* @return
|
*/
|
public static int getAge(Date birth) {
|
Calendar cal = Calendar.getInstance();
|
int thisYear = cal.get(Calendar.YEAR);
|
int thisMonth = cal.get(Calendar.MONTH);
|
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
|
|
cal.setTime(birth);
|
int birthYear = cal.get(Calendar.YEAR);
|
int birthMonth = cal.get(Calendar.MONTH);
|
int birthdayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
|
|
int age = thisYear - birthYear;
|
|
// 未足月
|
if (thisMonth <= birthMonth) {
|
// 当月
|
if (thisMonth == birthMonth) {
|
// 未足日
|
if (dayOfMonth < birthdayOfMonth) {
|
age--;
|
}
|
} else {
|
age--;
|
}
|
}
|
return age;
|
}
|
|
/**
|
* 获取某天结束秒数
|
* @param dateTime 日期
|
* @param lateSecond 延迟秒数
|
* @return
|
*/
|
public static long todayEndSecond(Date dateTime, Long lateSecond) {
|
if(dateTime == null){
|
dateTime = new Date();
|
}
|
if(lateSecond == null){
|
lateSecond = 0L;
|
}
|
Date endTime = DateUtil.dayToEndDate(dateTime);
|
return differSecond(dateTime, endTime) + lateSecond;
|
}
|
|
/**
|
* 计算2个实际相差秒数
|
* @param startTime 开始时间
|
* @param endTime 结束时间
|
* @return
|
*/
|
public static long differSecond(Date startTime, Date endTime) {
|
if(startTime == null || endTime == null){
|
return 0L;
|
}
|
long sTime = startTime.getTime();
|
long eTime = endTime.getTime();
|
return (eTime - sTime) / 1000L;
|
}
|
}
|