hz-zhhq-app-service/greenH5modul/.svn/pristine/e8/e8105210f185d000df8998b68da...

541 lines
14 KiB
Plaintext
Raw Normal View History

2025-01-21 13:12:35 +08:00
package com.nationalelectric.greenH5.utils;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.TimeZone;
import com.sun.org.apache.bcel.internal.generic.NEW;
public class DateUtil {
public static final String Y_M_DH_MI_S = "yyyy-MM-dd HH:mm:ss";
public static final String Y_M_D = "yyyy-MM-dd";
public static final String YMD_ZH = "yyyy年MM月dd日";
public static final String YMDH_ZH = "yyyy年MM月dd日HH时";
public static final String MD_ZH = "MM月dd日";
public static final String MDH_ZH = "MM月dd日HH时";
public static final String MDHM_ZH = "MM月dd日HH时mm分";
public static final String DHS_ZH = "dd日HH时ss分";
public static final String Y_M_D_H = "yyyy-MM-dd HH";
public static final String Y_M_D_H_MI = "yyyy-MM-dd HH:mm";
public static final String YMDH = "yyyyMMddHH";
public static final String YMD = "yyyyMMdd";
public static final SimpleDateFormat FORMAT_Y_M_DH_MI_S = new SimpleDateFormat(Y_M_DH_MI_S);
public static final SimpleDateFormat FORMAT_Y_M_D = new SimpleDateFormat(Y_M_D);
public static final SimpleDateFormat FORMAT_YMD_ZH = new SimpleDateFormat(YMD_ZH);
public static final SimpleDateFormat FORMAT_MD_ZH = new SimpleDateFormat(MD_ZH);
public static final SimpleDateFormat FORMAT_MDH_ZH = new SimpleDateFormat(MDH_ZH);
public static final SimpleDateFormat FORMAT_MDHM_ZH = new SimpleDateFormat(MDHM_ZH);
public static final SimpleDateFormat FORMAT_DHS_ZH = new SimpleDateFormat(DHS_ZH);
public static final SimpleDateFormat FORMAT_Y_M_D_H = new SimpleDateFormat(Y_M_D_H);
public static final SimpleDateFormat FORMAT_Y_M_D_H_MI = new SimpleDateFormat(Y_M_D_H_MI);
public static final SimpleDateFormat FORMAT_YMDH = new SimpleDateFormat(YMDH);
public static final SimpleDateFormat FORMAT_YMD = new SimpleDateFormat(YMD);
public static String now() {
return FORMAT_Y_M_DH_MI_S.format(new Date());
}
public static String now(SimpleDateFormat format) {
return format.format(new Date());
}
/**
* 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss
*
* @param strDate
* @return
*/
public static Date strToDateLong(String strDate, String format) {
SimpleDateFormat formatter = new SimpleDateFormat(format);
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(strDate, pos);
return strtodate;
}
public static String dateToStr(java.util.Date dateDate, String format) {
SimpleDateFormat formatter = new SimpleDateFormat(format);
String dateString = formatter.format(dateDate);
return dateString;
}
/**
* 获取昨天日期
*
* @return YYYY-MM-DD
*/
public static String yesterday() {
return getDateByDaysAndYeas(FORMAT_Y_M_D.format(new Date()), -1, 0, FORMAT_Y_M_D);
}
/**
* 获取明天日期
*
* @return YYYY-MM-DD
*/
public static String tomorrowDay() {
return getDateByDaysAndYeas(FORMAT_Y_M_D.format(new Date()), 1, 0, FORMAT_Y_M_D);
}
/**
* 获取昨天日期
*
* @return YYYY-MM-DD
*/
public static String yesterday(SimpleDateFormat format) {
return getDateByDaysAndYeas(format.format(new Date()), 1, 0, format);
}
/**
* 获取第二天日期
*
* @return YYYY-MM-DD String
*/
public static String nextDay(String tringdateString, SimpleDateFormat format) {
return getDateByDaysAndYeas(tringdateString, 1, 0, format);
}
/**
* 获取下一周日期
*
* @param dateString
* @param format
* @return
*/
public static String nextWeekDay(String dateString, SimpleDateFormat format) {
return getDateByDaysAndYeas(dateString, 7, 0, format);
}
/**
* 获取日期
*
* @return YYYY-MM-DD
*/
public static String getDateString(Date date, SimpleDateFormat format) {
if (date == null)
return null;
return format.format(date);
}
/**
* 获取其他时间日期
*
* @param date
* format格式日期
* @param days
* 相差天数
* @param years
* 相差年数
* @param format
* 日期格式 如YYYY-MM-DD
* @return
*/
public static String getDateByDaysAndYeas(String date, int days, int years, SimpleDateFormat format) {
String result = null;
Date d;
Calendar c = null;
try {
d = format.parse(date);
c = Calendar.getInstance();
c.setTime(d);
c.add(Calendar.DATE, days);
c.add(Calendar.YEAR, years);
result = format.format(c.getTime());
} catch (java.text.ParseException e) {
}
return result;
}
/**
* 获取其他时间日期
*
* @param date
* 日期
* @param days
* 相差天数
* @return
*/
public static Date getDateByDays(Date date, int days) {
Date d = null;
Calendar c = Calendar.getInstance();
c.setTime(date);
if (days != 0)
c.add(Calendar.DATE, days);
d = c.getTime();
return d;
}
/**
* 获取其他时间日期
*
* @param date
* 日期
* @param years
* 相差年数
* @return
*/
public static Date getDateByYear(Date date, int year) {
Date d = null;
Calendar c = Calendar.getInstance();
c.setTime(date);
if (year != 0)
c.add(Calendar.YEAR, year);
d = c.getTime();
return d;
}
/**
* 获取时间差(已经被日期格式的替代)
*
* @param rq2
* @param rq1
* @param format
* @return
*/
@Deprecated
public static int getDayPass(String rq2, String rq1, SimpleDateFormat format) {
Date d1, d2;
int days = 0;
try {
d2 = format.parse(rq2);
d1 = format.parse(rq1);
long diff = d2.getTime() - d1.getTime();
days = (int) (diff / (24 * 60 * 60 * 1000));
} catch (ParseException e) {
}
return days;
}
/**
* 获取时间差
*
* @param date1
* 起始日期
* @param date2
* 结束日期
* @return
*/
public static int getDayPass(Date date1, Date date2) {
int days = 0;
long diff = date2.getTime() - date1.getTime();
days = (int) (diff / (24 * 60 * 60 * 1000));
return days;
}
// 获得本周一的日期
public static String getMondayOFWeek(SimpleDateFormat format) {
Calendar currentDate = Calendar.getInstance();
int dayOfWeek = currentDate.get(Calendar.DAY_OF_WEEK); // 取得一周的第几天(第一天为周日)
if (dayOfWeek == 1)// 为周日时取6天前做周一
{
dayOfWeek = dayOfWeek - 7;
} else// 不为周日时取dayOfWeek-1天为周一如周六为7取7-1=6天前为周一
{
dayOfWeek--;
}
currentDate.add(Calendar.DATE, dayOfWeek);
Date monday = currentDate.getTime();
String preMonday = format.format(monday);
return preMonday;
}
// 获取当月第一天
public static String getFirstDayOfMonth(SimpleDateFormat format) {
String str = "";
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);// 设为当前月的1号
str = format.format(lastDate.getTime());
return str;
}
// 计算当月最后一天,返回字符串
public static String getLastDayOfMonth(SimpleDateFormat format) {
String str = "";
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);// 设为当前月的1号
lastDate.add(Calendar.MONTH, 1);// 加一个月变为下月的1号
lastDate.add(Calendar.DATE, -1);// 减去一天,变为当月最后一天
str = format.format(lastDate.getTime());
return str;
}
// 下月某天
public static String getNextMonthDay(String dateString, SimpleDateFormat format) {
String str = "";
Calendar c = Calendar.getInstance();
c.setTime(getDateByString(dateString, format));
c.add(Calendar.MONTH, 1);// 增一个月
str = format.format(c.getTime());
return str;
}
public static Date getDateByString(String dateString, SimpleDateFormat format) {
Date d = null;
try {
d = format.parse(dateString);
} catch (java.text.ParseException e) {
}
return d;
}
// 上月第一天
public static String getPreviousMonthFirst(SimpleDateFormat format) {
String str = "";
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);// 设为当前月的1号
lastDate.add(Calendar.MONTH, -1);// 减一个月变为下月的1号
str = format.format(lastDate.getTime());
return str;
}
// 获得上月最后一天的日期
public static String getPreviousMonthEnd(SimpleDateFormat format) {
String str = "";
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);// 把日期设置为当月第一天
lastDate.add(Calendar.DATE, -1);// 减一天,也就是上月最后一天
str = format.format(lastDate.getTime());
return str;
}
/**
* 获得系统当前年度第一天的日期
*
* @param SimpleDateFormat
* format
*/
public static String getCurrentYearFirst(SimpleDateFormat format) {
Calendar cd = Calendar.getInstance();
cd.set(Calendar.DAY_OF_YEAR, 1);// 把日期设为当年第一天
Date d = cd.getTime();
String str = format.format(d);
return str;
}
/**
* 获得当前日期所属年度第一天的日期
*
* @param SimpleDateFormat
* format
*/
public static Date getYearFirstDate(Date date1) {
Calendar c = Calendar.getInstance();
c.setTime(date1);
c.set(Calendar.DAY_OF_YEAR, 1);// 把日期设为当年第一天
return c.getTime();
}
/**
* 加几天
*/
public static DateTime addDays(int i, Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, i);
return new DateTime(c.getTime());
}
public static void main(String[] arg) {
System.err.println(DateTime.dateToStr(DateTime.strToDateLong4("2019-11-11 10:10"), "yyyy-MM-dd"));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
SimpleDateFormat Hsdf = new SimpleDateFormat("HH");
System.err.println(DateTime.dateToStr(DateTime.strToDateLong4("2019-11-11 10:10"), "MM-dd"));
// System.out.println(getMondayOFWeek(DateUtil.FORMAT_YMD));
// System.out.println(getPreviousMonthFirst(DateUtil.FORMAT_YMD));
// System.out.println(nextDay("20110303",DateUtil.FORMAT_YMD));
// System.out.println(getNextMonthDay("20110328",DateUtil.FORMAT_YMD));
/*
* System.out.println("20110101".substring(0,4)
* +"20110101".substring(4,6) +"20110101".substring(6,8));
*/
// System.out.println(Calendar.getInstance().get(Calendar.HOUR_OF_DAY));
// System.out.println(Calendar.getInstance().get(Calendar.HOUR)==0);
}
public static Date nextDay(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, 1);
return c.getTime();
}
/**
* 获取下一周日期
*
* @param dateString
* @param format
* @return
*/
public static Date nextWeekDay(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, 7);
return c.getTime();
}
public static Date WeekDay(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, 0);
return c.getTime();
}
/**
* 获取上周日期
*/
public static Date lastWeekDay(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, -7);
return c.getTime();
}
public static Date passHours(Date date, int hour) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.HOUR, hour);
return c.getTime();
}
// 下月某天
public static Date nextMonthDay(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.MONTH, 1);
return c.getTime();
}
public static long getSecondDiff(Date d1, Date d2) {
long diff = Math.abs(d1.getTime() - d2.getTime());// 无论谁先谁后,计算差值。
return diff / 1000;
}
public static long getMinuteDiff(Date d1, Date d2) {
long diff = Math.abs(d1.getTime() - d2.getTime());// 无论谁先谁后,计算差值。
return diff / (1000 * 60);
}
public static List<Date> findDates(Date dBegin, Date dEnd) {
List<Date> lDate = new ArrayList<Date>();
lDate.add(dBegin);
Calendar calBegin = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
calBegin.setTime(dBegin);
Calendar calEnd = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
calEnd.setTime(dEnd);
// 测试此日期是否在指定日期之后
while (dEnd.after(calBegin.getTime())) {
// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
calBegin.add(Calendar.DAY_OF_MONTH, 1);
lDate.add(calBegin.getTime());
}
return lDate;
}
public static List<String> getBetweenDays(String stime, String etime) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date sdate = null;
Date eDate = null;
List<String> list = null;
try {
sdate = df.parse(stime);
eDate = df.parse(etime);
Calendar c = Calendar.getInstance();
list = new ArrayList<String>();
while (sdate.getTime() <= eDate.getTime()) {
list.add(df.format(sdate));
// System.out.println(df.format(sdate));
c.setTime(sdate);
c.add(Calendar.DATE, 1); // 日期加1天
sdate = c.getTime();
}
} catch (ParseException e) {
}
return list;
}
// 返回周几
public static int getWeek(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
int weekday = c.get(Calendar.DAY_OF_WEEK);
int week = 0;
if (weekday == 1) {
week = 7;
} else if (weekday == 2) {
week = 1;
} else if (weekday == 3) {
week = 2;
} else if (weekday == 4) {
week = 3;
} else if (weekday == 5) {
week = 4;
} else if (weekday == 6) {
week = 5;
} else if (weekday == 7) {
week = 6;
}
return week;
}
/**
* 获取时间差(已经被日期格式的替代)
*
* @param rq2
* @param rq1
* @param format
* @return
*/
public static int getMPass(String rq2, String rq1, SimpleDateFormat format) {
Date d1, d2;
int days = 0;
try {
d2 = format.parse(rq2);
d1 = format.parse(rq1);
long diff = d2.getTime() - d1.getTime();
days = (int) (diff / (60 * 1000));
} catch (ParseException e) {
}
return days;
}
public static String getISO8601Timestamp(String str) {
try {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); // yyyy-MM-dd'T'HH:mm:ss.SSSZ
Date date = df.parse(str);
SimpleDateFormat df1 = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK);
Date date1 = df1.parse(date.toString());
SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return df2.format(date1);
} catch (Exception e) {
e.printStackTrace();
return String.valueOf(new Date());
}
}
}