package com.hcycom.mc.alarm.provider.utils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Pattern;
public class DateUtil {
//时间格式化
public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
public static SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
/**
* 获取几天前的现在时间
*
* @param day
* @return
*/
public static Date getLastMommentTime(int day) throws ParseException {
//创建Calendar 的实例
Calendar calendar = Calendar.getInstance();
//当前时间day天,即day天前的时间
calendar.add(Calendar.DAY_OF_MONTH, -day);
String time = sdf.format(calendar.getTime());
return sdf.parse(time);
}
/**
* 获取几天前的现在时间字符串
*
* @param day
* @return
*/
public static String getLastMommentTimeStr(int day) {
//创建Calendar 的实例
Calendar calendar = Calendar.getInstance();
//当前时间day天,即day天前的时间
calendar.add(Calendar.DAY_OF_MONTH, -day);
String time = sdf.format(calendar.getTime());
return time;
}
/**
* 当前时间加上分钟
*
* @param minute
* @return
*/
public static Date setMinuteTime(int minute) throws ParseException {
//创建Calendar 的实例
Calendar calendar = Calendar.getInstance();
//当前时间day天,即day天前的时间
calendar.add(Calendar.MINUTE, minute);
String time = sdf.format(calendar.getTime());
return sdf.parse(time);
}
public static String dateFormatUTC(int minute) {
SimpleDateFormat df = (SimpleDateFormat) DateFormat.getDateInstance();
df.applyPattern("yyyy-MM-dd HH:mm:ss");
//创建Calendar 的实例
Calendar calendar = Calendar.getInstance();
//当前时间day天,即day天前的时间
calendar.add(Calendar.MINUTE, minute);
String time = sdf.format(calendar.getTime());
// if (date == null) {
// return "1970-01-01T08:00:00.000Z";
// }
// long localTimeInMillis = calendar.getTime().getTime();
/** long时间转换成Calendar */
// calendar.setTimeInMillis(localTimeInMillis);
/** 取得时间偏移量 */
int zoneOffset = calendar.get(Calendar.ZONE_OFFSET);
/** 取得夏令时差 */
int dstOffset = calendar.get(Calendar.DST_OFFSET);
/** 从本地时间里扣除这些差量,即可以取得UTC时间*/
calendar.add(Calendar.MILLISECOND, -(zoneOffset + dstOffset));
/** 取得的时间就是UTC标准时间 */
Date utcDate = new Date(calendar.getTimeInMillis());
String dateString = df.format(utcDate);
Pattern pattern = Pattern.compile("\\d{4,4}-\\d{2,2}-\\d{2,2} \\d{2,2}:\\d{2,2}:\\d{2,2}");
if (pattern.matcher(dateString).matches()) {
return dateString.replaceAll(" ", "T") + ".000Z";
}else {
return "1970-01-01T08:00:00.000Z";
}
}
public static Date utcFormatDate(String dateUTC) {
Date date=new Date();
try {
dateUTC = dateUTC.replace("Z", " UTC");
date = sdf2.parse(dateUTC);
}catch (Exception e){
}
return date;
}
/**
* 获取几小时前的现在时间
*
* @param hours
* @return
*/
public static String getLastHoursTime(int hours) throws ParseException {
//创建Calendar 的实例
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -hours);
String time = sdf3.format(calendar.getTime());
return time;
}
/**
* 获取几分钟前的现在时间
*
* @param minute
* @return
*/
public static String setMinuteTimeBefor(int minute) throws ParseException {
//创建Calendar 的实例
Calendar calendar = Calendar.getInstance();
//当前时间day天,即day天前的时间
calendar.add(Calendar.MINUTE, -minute);
String time = sdf3.format(calendar.getTime());
return time;
}
public static String dateStringFormatUTC(String date) {
SimpleDateFormat df = (SimpleDateFormat) DateFormat.getDateInstance();
df.applyPattern("yyyy-MM-dd HH:mm:ss");
//创建Calendar 的实例
Calendar calendar = Calendar.getInstance();
try {
Date parse = df.parse(date);
calendar.setTime(parse);
}catch (Exception e){
}
/** 取得时间偏移量 */
int zoneOffset = calendar.get(Calendar.ZONE_OFFSET);
/** 取得夏令时差 */
int dstOffset = calendar.get(Calendar.DST_OFFSET);
/** 从本地时间里扣除这些差量,即可以取得UTC时间*/
calendar.add(Calendar.MILLISECOND, -(zoneOffset + dstOffset));
/** 取得的时间就是UTC标准时间 */
Date utcDate = new Date(calendar.getTimeInMillis());
String dateString = df.format(utcDate);
Pattern pattern = Pattern.compile("\\d{4,4}-\\d{2,2}-\\d{2,2} \\d{2,2}:\\d{2,2}:\\d{2,2}");
if (pattern.matcher(dateString).matches()) {
return dateString.replaceAll(" ", "T") + ".000Z";
}else {
return "1970-01-01T08:00:00.000Z";
}
}
public static String utcFormatDateString(String dateUTC) {
String date="";
try {
dateUTC = dateUTC.replace("Z", " UTC");
date = sdf.format(sdf2.parse(dateUTC));
}catch (Exception e){
}
return date;
}
public static String formDate(String date, int type,int count){
SimpleDateFormat df = (SimpleDateFormat) DateFormat.getDateInstance();
df.applyPattern("yyyy-MM-dd HH:mm:ss");
//创建Calendar 的实例
Calendar calendar = Calendar.getInstance();
try {
Date parse = df.parse(date);
calendar.setTime(parse);
}catch (Exception e){
}
if (type == Calendar.HOUR_OF_DAY) {
calendar.add(Calendar.HOUR_OF_DAY, count);
} else {
calendar.add(Calendar.DAY_OF_MONTH, count);
calendar.add(Calendar.HOUR_OF_DAY, 8);
}
System.out.println(df.format(calendar.getTime()));
return df.format(calendar.getTime());
}
/**
* 获取几天前获后的传值时间
*
* @param day
* @return
*/
public static String getAroundDayTime(String date,int day,SimpleDateFormat sdf) throws ParseException {
//创建Calendar 的实例
Calendar calendar = Calendar.getInstance();
//当前时间day天,即day天前的时间
Date parse = sdf.parse(date);
calendar.setTime(parse);
calendar.add(Calendar.DAY_OF_MONTH, day);
String time = sdf.format(calendar.getTime());
return time;
}
/**
* 获取年
*
* @param date
* @return
*/
public static String getYear(String date,SimpleDateFormat sdf) throws ParseException {
Date parse = sdf.parse(date);
String year=String.format("%tY", parse);
return year;
}
/**
* 获取年
*
* @param date
* @return
*/
public static String getMonth(String date,SimpleDateFormat sdf) throws ParseException {
Date parse = sdf.parse(date);
String mon=String .format("%tm", parse);
return mon;
}
/**
*获取随机日期
*@parambeginDate起始日期,格式为:yyyy-MM-dd
*@paramendDate结束日期,格式为:yyyy-MM-dd
*@return
*/
public static Date randomDate(String beginDate,String endDate){
try{
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date start=format.parse(beginDate);// 构造开始日期
Date end=format.parse(endDate);// 构造结束日期
// getTime()表示返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
if(start.getTime()>=end.getTime()){
return null;
}
long date=random(start.getTime(),end.getTime());
return new Date(date);
}catch(Exception e){
e.printStackTrace();
}
return null;
}
private static long random(long begin,long end){
long rtn=begin+(long)(Math.random()*(end-begin));
// 如果返回的是开始时间和结束时间,则递归调用本函数查找随机值
if(rtn==begin||rtn==end){
return random(begin,end);
}
return rtn;
}
public static void main(String[] args) {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String alarmChangeTime= "2021-05-13 10:05:46";
String actionTime="2021-05-14 04:31:22";
String alarmSendTime="2021-05-14 04:55:11";
Date date = DateUtil.randomDate(actionTime, alarmSendTime);
alarmChangeTime=sdf.format(date);
System.out.println(alarmChangeTime);
}
public final static int YEAR = Calendar.YEAR;
public final static int MONTH = Calendar.MONTH;
public final static int DATE = Calendar.DATE;
public final static int HOUR = Calendar.HOUR;
public final static int MINUTE = Calendar.MINUTE;
public final static int SECOND = Calendar.SECOND;
/**
* 将yyyy-MM-dd hh:mm:ss的字符串转换为时间
* @param str
* @return
*/
public static Date formatDate(String str){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date d = sdf.parse(str);
return d;
} catch (ParseException e) {
e.printStackTrace();
return new Date(0);
}
}
/**
* 将时间按字符串展示
* @param d
* @return
*/
public static String formatDate(Date d){
return formatDate(d, "yyyy-MM-dd HH:mm:ss");
}
/**
* 将时间按字符串展示
* @param d
* @param p
* @return
*/
public static String formatDate(Date d, String p){
if(d.getTime()==0)
return "";
SimpleDateFormat sdf = new SimpleDateFormat(p);
return sdf.format(d);
}
/**
* 本地时间转换UTC
*
* @param date
* @return
*/
public static String formatUTC(Date date){
SimpleDateFormat df = (SimpleDateFormat) DateFormat.getDateInstance();
df.applyPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
if(date == null){
return "1970-01-01T08:00:00.000Z";
}
long localTimeInMillis=date.getTime();
/** long时间转换成Calendar */
Calendar calendar= Calendar.getInstance();
calendar.setTimeInMillis(localTimeInMillis);
/** 取得时间偏移量 */
int zoneOffset = calendar.get(Calendar.ZONE_OFFSET);
/** 取得夏令时差 */
int dstOffset = calendar.get(Calendar.DST_OFFSET);
/** 从本地时间里扣除这些差量,即可以取得UTC时间 */
calendar.add(Calendar.MILLISECOND, -(zoneOffset + dstOffset));
/** 取得的时间就是UTC标准时间 */
Date utcDate=new Date(calendar.getTimeInMillis());
String dateString = df.format(utcDate);
return dateString;
}
//获取两个时间的差绝对值
public static long getDateDiff(Date d1, Date d2){
return Math.abs(d1.getTime()-d2.getTime());
}
/**
* 时间加减操作
*
* @param date 时间:需要加减的时间
* @param time int类型:加减时长
* @param type String类型:(YEAR,MONTH,DATE,HOUR,MINUTE,SECOND)
* @return Date
*/
public static Date addTime(Date date, int time, int type){
Calendar theTime = Calendar.getInstance();
theTime.setTime(date);
switch (type){
case YEAR:
theTime.add(Calendar.YEAR,time);
break;
case MONTH:
theTime.add(Calendar.MONTH,time);
break;
case DATE:
theTime.add(Calendar.DATE,time);
break;
case HOUR:
theTime.add(Calendar.HOUR,time);
break;
case MINUTE:
theTime.add(Calendar.MINUTE,time);
break;
case SECOND:
theTime.add(Calendar.SECOND,time);
break;
}
return theTime.getTime();
}
/**
* 时间转换为 UTC 时间
*
* @param localTime
* @return
*/
public static Date localToUTC(String localTime) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date localDate = null;
try {
localDate = sdf.parse(localTime);
} catch (ParseException e) {
e.printStackTrace();
}
long localTimeInMillis = localDate.getTime();
/** long时间转换成Calendar */
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(localTimeInMillis);
/** 取得时间偏移量 */
int zoneOffset = calendar.get(java.util.Calendar.ZONE_OFFSET);
/** 取得夏令时差 */
int dstOffset = calendar.get(java.util.Calendar.DST_OFFSET);
/** 从本地时间里扣除这些差量,即可以取得UTC时间*/
calendar.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));
/** 取得的时间就是UTC标准时间 */
Date utcDate = new Date(calendar.getTimeInMillis());
return utcDate;
}
public static String utcToLocal(String oldDate) {
Date date1 = null;
DateFormat df2 = null;
try {
oldDate= oldDate.replace("Z", " UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
Date date = df.parse(oldDate);
SimpleDateFormat df1 = new SimpleDateFormat ("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK);
date1 = df1.parse(date.toString());
df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
} catch (ParseException e) {
e.printStackTrace();
}
return df2.format(date1);
}
}
根据日期字符串 获取该月的起始日期和结束日期
String date=”2017-07”;
String types=json.optString("types");
Calendar calendar= Calendar.getInstance();
calendar.set(Calendar.YEAR, Integer.parseInt(date.substring(0, 4)));
calendar.set(Calendar.MONTH, Integer.parseInt(date.substring(5, 7))-1);
calendar.set(Calendar.DATE, 1);
Date time = calendar.getTime();
SimpleDateFormat sd=new SimpleDateFormat("yyyyMMdd");
String startDate = sd.format(time);
int daysOfMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DATE, daysOfMonth);
Date time2 = calendar.getTime();
String endDate = sd.format(time2);