我们经常会遇到日期的处理需求,以下是工作中编写的日期共通类
package com.gomecar.index.common.utils; import org.apache.log4j.Logger; import org.springframework.util.StringUtils; import java.sql.Timestamp; import java.text.DateFormat; import java.text.ParseException; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class DateUtil { private static Logger logger = Logger.getLogger(DateUtil.class); public static final String DATETIME = "yyyy-MM-dd HH:mm:ss"; public static final String DATE = "yyyy-MM-dd"; public static String datetimeToStr(final Date date, final String format) { if (date == null) { return null; } SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format(date); } public static String dateTimeToStr(final Date date) { return DateUtil.datetimeToStr(date, "yyyy-MM-dd HH:mm:ss"); } public static String dateToStr(final Date date) { return DateUtil.datetimeToStr(date, "yyyy-MM-dd"); } public static String dateToStr(final Date date, String format) { return DateUtil.datetimeToStr(date, format); } public static String getCurrentDate() { return new SimpleDateFormat(DATE).format(new Date()); } public static String getCurrentDate(String format) { return new SimpleDateFormat(format).format(new Date()); } public static String getCurrentDatetime() { return new SimpleDateFormat(DATETIME).format(new Date()); } public static String getCurrentDatetime(String format) { return new SimpleDateFormat(format).format(new Date()); } public static int getCurrentTimeHashCode() { return String.valueOf(System.currentTimeMillis()).hashCode(); } /** * 获得当前时间当天的开始时间,即当前给出的时间那一天的00:00:00的时间 * * @param date * 当前给出的时间 * @return 当前给出的时间那一天的00:00:00的时间的日期对象 */ public static Date getDateBegin(final Date date) { SimpleDateFormat ymdFormat = new SimpleDateFormat("yyyy-MM-dd"); if (date != null) { try { return DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.CHINA).parse(ymdFormat.format(date)); } catch (ParseException e) { logger.error("DataFromat error"); } } return null; } public static Date getDateEnd(Date date) { SimpleDateFormat ymdFormat = new SimpleDateFormat("yyyy-MM-dd"); if (date != null) { try { Date endDate = strToDate(ymdFormat.format(new Date(date.getTime() + 24 * 60 * 60 * 1000))); endDate = new Date(endDate.getTime() - 1000); return endDate; } catch (Exception e) { logger.error("DataFromat error"); } } return null; } public static long getNow() { return System.currentTimeMillis(); } public static String getTime() { Date d = new Date(); String re = datetimeToStr(d, "yyyyMMddHHmmssSSS"); return re; } public static String getTime(String format) { Date d = new Date(); String re = datetimeToStr(d, format); return re; } public static Date strToFormatDate(final String date, final String format) { if (date == null) { return null; } SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.parse(date, new ParsePosition(0)); } public static Date strToDate(final String date) { return DateUtil.strToFormatDate(date, "yyyy-MM-dd"); } public static final Date strToDate(final String dateStr, final String format) { return DateUtil.strToFormatDate(dateStr, format); } public static Date strToDateTime(final String date) { return DateUtil.strToFormatDate(date, "yyyy-MM-dd HH:mm:ss"); } public static Date strToDateTime(final String date, final String format) { return DateUtil.strToFormatDate(date, format); } public static Timestamp strToTimestamp(String str) throws Exception { if (StringUtils.isEmpty(str)) { throw new Exception("转换错误"); } if (str.trim().length() > 10) { return new Timestamp(new SimpleDateFormat(DATETIME).parse(str).getTime()); } else { return new Timestamp(new SimpleDateFormat(DATE).parse(str).getTime()); } } public static Timestamp strToTimestamp(String sDate, String sFormat) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat(sFormat); Date t = sdf.parse(sDate); return new Timestamp(t.getTime()); } public static boolean validateExpireDate(final long timeMillis, final long expireTimeMillis) { return (getNow() - timeMillis) > expireTimeMillis; } //秒换算成时分秒 public static String secToTime(int time) { String timeStr = null; int hour = 0; int minute = 0; int second = 0; if (time <= 0) return "00:00"; else { minute = time / 60; if (minute < 60) { second = time % 60; timeStr = unitFormat(minute) + ":" + unitFormat(second); } else { hour = minute / 60; if (hour > 99) return "99:59:59"; minute = minute % 60; second = time - hour * 3600 - minute * 60; timeStr = unitFormat(hour) + ":" + unitFormat(minute) + ":" + unitFormat(second); } } return timeStr; } public static String unitFormat(int i) { String retStr = null; if (i >= 0 && i < 10) retStr = "0" + Integer.toString(i); else retStr = "" + i; return retStr; } /** * 获取时间差 * @param timeMillis * @return */ public static String getLastTime(long timeMillis){ if (timeMillis<=0){ return "-1"; } String time=""; try { DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date d1 = df.parse(getYearMonthDayHourMinuteSecond(System.currentTimeMillis()+timeMillis)); Date d2 = new Date(); long date = d1.getTime() - d2.getTime(); long day = date / (1000 * 60 * 60 * 24); long hour = (date / (1000 * 60 * 60) - day * 24); long min = ((date / (60 * 1000)) - day * 24 * 60 - hour * 60); long s = (date/1000 - day*24*60*60 - hour*60*60 - min*60); time = day+"天"+hour+"小时"+min+"分"+s+"秒"; //System.out.println(""+day+"天"+hour+"小时"+min+"分"+s+"秒"); }catch (Exception e) { return "-1"; } return time; } public static String getYearMonthDayHourMinuteSecond(long timeMillis) { int timezone = 8; // 时区 long totalSeconds = timeMillis / 1000; totalSeconds += 60 * 60 * timezone; int second = (int) (totalSeconds % 60);// 秒 long totalMinutes = totalSeconds / 60; int minute = (int) (totalMinutes % 60);// 分 long totalHours = totalMinutes / 60; int hour = (int) (totalHours % 24);// 时 int totalDays = (int) (totalHours / 24); int _year = 1970; int year = _year + totalDays / 366; int month = 1; int day = 1; int diffDays; boolean leapYear; while (true) { int diff = (year - _year) * 365; diff += (year - 1) / 4 - (_year - 1) / 4; diff -= ((year - 1) / 100 - (_year - 1) / 100); diff += (year - 1) / 400 - (_year - 1) / 400; diffDays = totalDays - diff; leapYear = (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0); if (!leapYear && diffDays < 365 || leapYear && diffDays < 366) { break; } else { year++; } } int[] monthDays; if (diffDays >= 59 && leapYear) { monthDays = new int[] { -1, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 }; } else { monthDays = new int[] { -1, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; } for (int i = monthDays.length - 1; i >= 1; i--) { if (diffDays >= monthDays[i]) { month = i; day = diffDays - monthDays[i] + 1; break; } } return year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second; } }
时间: 2024-10-27 08:23:06