|
@@ -0,0 +1,347 @@
|
|
|
+package com.emato.cus.utils.date;
|
|
|
+
|
|
|
+import java.text.ParseException;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.Calendar;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.Locale;
|
|
|
+
|
|
|
+public class DateUtil {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 时间格式(yyyy-MM-dd)
|
|
|
+ */
|
|
|
+ public final static String DATE_PATTERN_YYYY_MM_DD = "yyyy-MM-dd";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 时间格式(yyyy-MM-dd)
|
|
|
+ */
|
|
|
+ public final static String DATE_PATTERN_YYYY_T_HH_Z = "yyyy-MM-dd'T'HH:mm:ss.SSS Z";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 字符串的日期类型 转换称 Date 类型
|
|
|
+ *
|
|
|
+ * @param timeContent 字符串的日期类型
|
|
|
+ * @param formatStyle 日期格式
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date stringConvertDate(String timeContent, String formatStyle) {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat(formatStyle);
|
|
|
+ try {
|
|
|
+ return format.parse(timeContent);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检查日期格式
|
|
|
+ *
|
|
|
+ * @param time
|
|
|
+ * @param format
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static boolean checkDate(String time, String format) {
|
|
|
+ if (stringConvertDate(time, format) == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Date 转化成 String 类型的字符串日期格式
|
|
|
+ *
|
|
|
+ * @param date
|
|
|
+ * @param formatStyle 转化成 什么格式
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String dateConvertString(Date date, String formatStyle) {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat(formatStyle);
|
|
|
+ return format.format(date);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 字符串日期格式 转换成 带 地区标识的 Date 类型
|
|
|
+ *
|
|
|
+ * @param strDate
|
|
|
+ * @param locale
|
|
|
+ * @param formatStyle
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date stringConvertLocalDate(String strDate, Locale locale, String formatStyle) {
|
|
|
+ SimpleDateFormat srcsdf = new SimpleDateFormat(formatStyle, locale);
|
|
|
+ try {
|
|
|
+ return srcsdf.parse(strDate);
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取本地时间相对的UTC | GMT时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date getUtcTime() {
|
|
|
+ // 1、取得本地时间:
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ // 2、取得时间偏移量:
|
|
|
+ final int zoneOffset = calendar.get(Calendar.ZONE_OFFSET);
|
|
|
+ // 3、取得夏令时差:
|
|
|
+ final int dstOffset = calendar.get(Calendar.DST_OFFSET);
|
|
|
+ // 4、从本地时间里扣除这些差量,即可以取得UTC时间:
|
|
|
+ calendar.add(Calendar.MILLISECOND, -(zoneOffset + dstOffset));
|
|
|
+ return calendar.getTime();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取2个时间相差多少秒
|
|
|
+ *
|
|
|
+ * @param date1
|
|
|
+ * @param date2
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Long getDiffSeconds(Date date1, Date date2) {
|
|
|
+ long milliseconds1 = date1.getTime();
|
|
|
+ long milliseconds2 = date2.getTime();
|
|
|
+ long diff = milliseconds1 - milliseconds2;
|
|
|
+ if (diff < 0) {
|
|
|
+ diff = -diff;
|
|
|
+ }
|
|
|
+ long diffSeconds = diff / (1000);
|
|
|
+ return diffSeconds;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取2个时间相差多少分钟
|
|
|
+ *
|
|
|
+ * @param date1
|
|
|
+ * @param date2
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Long getDiffMinutes(Date date1, Date date2) {
|
|
|
+ Long diffMinutes = getDiffSeconds(date1, date2) / 60;
|
|
|
+ return diffMinutes;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取2个时间直接 相差多少小时
|
|
|
+ *
|
|
|
+ * @param date1
|
|
|
+ * @param date2
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Long getDiffHours(Date date1, Date date2) {
|
|
|
+ Long diffHours = getDiffMinutes(date1, date2) / 60;
|
|
|
+ return diffHours;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取2个时间直接 相差多少天
|
|
|
+ *
|
|
|
+ * @param date1
|
|
|
+ * @param date2
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Long getDiffDays(Date date1, Date date2) {
|
|
|
+ Long diffDays = getDiffHours(date1, date2) / 24;
|
|
|
+ return diffDays;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 多少天以前
|
|
|
+ *
|
|
|
+ * @param ago
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getDaysAgoStart(int ago) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.add(Calendar.DAY_OF_YEAR, -ago);
|
|
|
+ String time = DateUtil.dateConvertString(calendar.getTime(), DateConstant.DATE_MONTH_DAY);
|
|
|
+ String timeFrom = time + " 00:00:00";
|
|
|
+ return timeFrom;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获得指定日期的下一天
|
|
|
+ *
|
|
|
+ * @param day
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getNextDayTime(String day) {
|
|
|
+ Date date = DateUtil.stringConvertDate(day, DateConstant.DATE_TIME_SECOND);
|
|
|
+
|
|
|
+ Calendar cal = Calendar.getInstance();
|
|
|
+ cal.setTime(date);
|
|
|
+ cal.add(Calendar.DATE, 1);
|
|
|
+
|
|
|
+ return new SimpleDateFormat(DateConstant.DATE_TIME_SECOND).format(cal.getTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获得指定日期的前一天
|
|
|
+ *
|
|
|
+ * @param day
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getPreDayTime(String day) {
|
|
|
+ Date date = DateUtil.stringConvertDate(day, DateConstant.DATE_TIME_SECOND);
|
|
|
+
|
|
|
+ Calendar cal = Calendar.getInstance();
|
|
|
+ cal.setTime(date);
|
|
|
+ cal.add(Calendar.DATE, -1);
|
|
|
+
|
|
|
+ return new SimpleDateFormat(DateConstant.DATE_TIME_SECOND).format(cal.getTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获得指定日期的前一天
|
|
|
+ *
|
|
|
+ * @param day
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getPreDayDate(String day) {
|
|
|
+ Date date = DateUtil.stringConvertDate(day, DateConstant.DATE_MONTH_DAY);
|
|
|
+
|
|
|
+ Calendar cal = Calendar.getInstance();
|
|
|
+ cal.setTime(date);
|
|
|
+ cal.add(Calendar.DATE, -1);
|
|
|
+
|
|
|
+ return new SimpleDateFormat(DateConstant.DATE_MONTH_DAY).format(cal.getTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 多少天以后
|
|
|
+ *
|
|
|
+ * @param date
|
|
|
+ * @param dayNum
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date getNextPrevDay(Date date, int dayNum) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(date);
|
|
|
+ calendar.add(Calendar.DAY_OF_MONTH, dayNum);
|
|
|
+ return calendar.getTime();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断time1 是否早于time2
|
|
|
+ *
|
|
|
+ * @param time1
|
|
|
+ * @param time2
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static boolean before(String time1, String time2) {
|
|
|
+ Date date1 = DateUtil.stringConvertDate(time1, DateConstant.DATE_TIME_SECOND);
|
|
|
+ Date date2 = DateUtil.stringConvertDate(time2, DateConstant.DATE_TIME_SECOND);
|
|
|
+
|
|
|
+ return date1.before(date2);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获得当前系统时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getSystemDate() {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat(DateConstant.DATE_TIME_SECOND);
|
|
|
+ return sdf.format(new Date());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 得到某个时间段加上多少小时的时间
|
|
|
+ *
|
|
|
+ * @param dateTime
|
|
|
+ * @param hours
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date getDateTimeAddHours(Date dateTime, Integer hours) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(dateTime);
|
|
|
+ calendar.add(Calendar.HOUR, hours);
|
|
|
+ return calendar.getTime();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前时间的时间戳
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static long getTimestampByDate() {
|
|
|
+ return System.currentTimeMillis();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取指定时间的时间戳
|
|
|
+ *
|
|
|
+ * @param dt
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static long getTimestampByDate(Date dt) {
|
|
|
+ return dt.getTime();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 取得当前unix时间戳(精确到秒)
|
|
|
+ *
|
|
|
+ * @return unixTimeStamp
|
|
|
+ */
|
|
|
+ public static String getUnixTimeStamp() {
|
|
|
+ long time = System.currentTimeMillis();
|
|
|
+ String unixTimeStamp = String.valueOf(time / 1000);
|
|
|
+ return unixTimeStamp;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 日期格式字符串转换成时间戳
|
|
|
+ *
|
|
|
+ * @param dateStr 字符串日期
|
|
|
+ * @param format 如:yyyy-MM-dd HH:mm:ss
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String Date2UnixTimeStamp(String dateStr, String format) {
|
|
|
+ try {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat(format);
|
|
|
+ return String.valueOf(sdf.parse(dateStr).getTime() / 1000);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断是否当天日期
|
|
|
+ *
|
|
|
+ * @param dateStr
|
|
|
+ * @param formatStr
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static boolean isToday(String dateStr, String formatStr) {
|
|
|
+ try {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat(formatStr);
|
|
|
+ Date date = format.parse(dateStr);
|
|
|
+
|
|
|
+ Calendar c1 = Calendar.getInstance();
|
|
|
+ c1.setTime(date);
|
|
|
+ int year1 = c1.get(Calendar.YEAR);
|
|
|
+ int month1 = c1.get(Calendar.MONTH) + 1;
|
|
|
+ int day1 = c1.get(Calendar.DAY_OF_MONTH);
|
|
|
+
|
|
|
+ Calendar c2 = Calendar.getInstance();
|
|
|
+ c2.setTime(new Date());
|
|
|
+ int year2 = c2.get(Calendar.YEAR);
|
|
|
+ int month2 = c2.get(Calendar.MONTH) + 1;
|
|
|
+ int day2 = c2.get(Calendar.DAY_OF_MONTH);
|
|
|
+
|
|
|
+ if (year1 == year2 && month1 == month2 && day1 == day2) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+}
|