package com.cloudwise.gwxt.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;
/**
* 日期处理格式
* @author lifaran
*/
public class DateUtils {
public static final String DEFAULT_FORMAT="yyyy-MM-dd HH:mm:ss";
/**
* 获取过去第几天的日期
* @param past 负数代表 -7代表7天前的日期 7天后的日期
* @return
*/
public static String getDayDate(int past) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + past);
Date today = calendar.getTime();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String result = format.format(today);
return result;
}
public static Date getDayDateToDate(int past) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + past);
return calendar.getTime();
}
/**
* 根据入参(单位:小时)算intervalHour小时前的时间
* @param intervalHour 时间间隔 6 代表6小时前的日期
* @return
*/
public static String getBeforeHour(Integer intervalHour){
Calendar calendar = Calendar.getInstance();
/* HOUR_OF_DAY 指示一天中的小时 -6 代表六小时前的数据格式
* 原时间:2021-02-04 15:49:38
* 6小时前:2021-02-04 9:49:38
* */
calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - intervalHour);
SimpleDateFormat df1 = new SimpleDateFormat(DEFAULT_FORMAT);
String str=df1.format(calendar.getTime());
System.out.println(intervalHour+"个小时前的时间:" + str);
String strNow= df1.format(new Date());
System.out.println("当前的时间:" + strNow);
return str;
}
/**
* 根据入参(单位:分钟)算minuteFrom分钟前的时间
* @param minuteFrom 6代表 6分钟前的时间
* @return
*/
public static String getBeforeMinute(Integer minuteFrom){
Calendar nowBefore = Calendar.getInstance();
Integer beforeTime = -minuteFrom;
nowBefore.add(Calendar.MINUTE, beforeTime);
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = nowBefore.getTime();
String str=sdf.format(nowBefore.getTime());
System.out.println(minuteFrom+"分钟前的时间:" + str);
String strNow= sdf.format(new Date());
System.out.println("当前的时间:" + strNow);
return str;
}
/**
* 得到day的起始时间点。
*
* @param date
* @return
*/
public static Date getDayStart(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();
}
/**
* 得到day的终止时间点.
*
* @param date
* @return
*/
public static Date getDayEnd(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);
calendar.add(Calendar.DAY_OF_MONTH, 1);
calendar.add(Calendar.MILLISECOND, -1);
return calendar.getTime();
}
/**
* 得到month的终止时间点.
*
* @param date
* @return
*/
public static Date getMonthEnd(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
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);
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.MILLISECOND, -1);
return calendar.getTime();
}
/**
* 日期转换为制定格式字符串
*
* @param time
* @param format
* @return
*/
public static String formatDateToString(Date time, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(time);
}
/**
* 字符串转换为制定格式日期
* (注意:当你输入的日期是2014-12-21 12:12,format对应的应为yyyy-MM-dd HH:mm
* 否则异常抛出)
* @param date
* @param format
* @return
* @throws ParseException
* @
*/
public static Date formatStringToDate(String date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
try {
return sdf.parse(date);
} catch (ParseException ex) {
ex.printStackTrace();
throw new RuntimeException(ex.toString());
}
}
/**
* 时间转换成字符串
* @param s
* @param format
* @return
* @throws ParseException
*/
public static long dateToStamp(String s,String format) throws ParseException{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
Date date = simpleDateFormat.parse(s);
return date.getTime();
}
/**
* 将时间戳转换为时间
* @param s
* @param format "yyyy-MM-dd HH:mm:ss"
* @return
*/
public static String stampToDate(Long s,String format){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
long lt = new Long(s);
Date date = new Date(lt);
return simpleDateFormat.format(date);
}
public static Date asDate(LocalDate localDate) {
return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
}
public static Date asDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
public static LocalDate asLocalDate(Date date) {
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();
}
public static LocalDateTime asLocalDateTime(Date date) {
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
}
}