zoukankan      html  css  js  c++  java
  • 时间日期各种工具类

    package com.panchan.m2.utils;
    
    import java.sql.Timestamp;
    import java.text.DateFormat;
    import java.text.DecimalFormat;
    import java.text.ParseException;
    import java.text.ParsePosition;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.List;
    import java.util.Locale;
    import java.util.SimpleTimeZone;
    import java.util.TimeZone;
    
    import org.apache.commons.lang3.StringUtils;
    
    
    public abstract class DateUtils {
         public static final String dateFmt = "yyyy-MM-dd hh:mm:ss.SSS";
         
          public static String getTime()
          {
            return formatCurrentDate("yyyy-MM-dd HH:mm:ss");
          }
    
          public static String getTime(String format)
          {
            return formatCurrentDate(format);
          }
    
          public static String getCurrentDate()
          {
            return formatCurrentDate("yyyyMMdd");
          }
    
          public static String getCurrentDate(String format)
          {
            return formatCurrentDate(format);
          }
    
          public static String getThisMonth()
          {
            return formatCurrentDate("yyyyMM");
          }
    
          public static String getThisYear()
          {
            return formatCurrentDate("yyyy");
          }
    
          public static String getCurrentTime()
          {
            return formatCurrentDate("HHmmss");
          }
    
          public static String getDayInterval(String format, int distance)
          {
            Calendar calendar = getCalendar();
            calendar.roll(5, distance);
            return format(calendar.getTime(), format);
          }
    
          public static String getDayInterval(String dateString, String format, int distance)
          {
            Calendar calendar = getCalendar(dateString);
            calendar.roll(5, distance);
            return format(calendar, format);
          }
    
          public static String getYesterday()
          {
            Calendar calendar = getCalendar();
            calendar.roll(5, -1);
            return format(calendar, "yyyy/MM/dd");
          }
    
          public static String getLastMonth()
          {
            Calendar calendar = getCalendar();
            calendar.roll(2, -1);
            return format(calendar, "yyyy/MM");
          }
    
          public static String[] getDates(String startDay, String endDay)
          {
            List dates = new ArrayList();
            dates.add(startDay);
            Calendar cal = getCalendar();
            cal.setTime(string2Date(startDay));
            for (String nextDay = date2String(cal.getTime()); !nextDay.equals(endDay); dates.add(nextDay))
            {
              cal.add(5, 1);
              nextDay = date2String(cal.getTime());
            }
    
            return (String[])dates.toArray(new String[0]);
          }
    
          public static Calendar getCalendar()
          {
            return getCalendar(new Date());
          }
    
          public static Calendar getCalendar(String dateString)
          {
            return getCalendar(string2Date(dateString, "yyyyMMdd"));
          }
    
          public static Calendar getCalendar(Date date)
          {
            Calendar calendar = new GregorianCalendar(TimeZone.getDefault(), Locale.getDefault());
            calendar.setTime(date);
            return calendar;
          }
    
          public static String date2String(Date d)
          {
            return date2String(d, "yyyyMMddhhmmss");
          }
    
          public static String date2String(Date date, String format)
          {
            return format(date, format);
          }
    
          public static Date string2Date(String s)
          {
            return string2Date(s, "yyyyMMddhhmmss");
          }
    
          public static Date string2Date(String dateString, String format)
          {
            return parseDate(dateString, format);
          }
    
          public static long getDayDistance(String startDate, String endDate)
            throws Exception
          {
            return getDayDistance(startDate, endDate, null);
          }
    
          public static long getDayDistance(String startDate, String endDate, String format)
            throws Exception
          {
            if (format == null) {
              format = "yyyyMMdd";
            }
    
            long day2day = 0L;
            Date sDate = parseDate(startDate, format);
            Date eDate = parseDate(endDate, format);
            day2day = (eDate.getTime() - sDate.getTime()) / 86400000L;
    
            return Math.abs(day2day);
          }
    
          public static String getUSTime()
          {
            DateFormat dateFormat = createDateFormat("EEE, d MMM yyyy HH:mm:ss z", Locale.US);
            dateFormat.setTimeZone(new SimpleTimeZone(0, "GMT"));
            return dateFormat.format(new Date());
          }
    
          public static String getCurrentday()
          {
            Calendar calendar = getCalendar();
            calendar.roll(5, 0);
            return format(calendar, "yyyy-MM-dd");
          }
    
          public static String convertFormat(String dateData)
          {
            return convertFormat(dateData, "yyyy-MM-dd");
          }
    
          public static String convertFormat(String dateData, String format)
          {
            return convertToString(convertToTimestamp(dateData), format);
          }
    
          public static Timestamp getCurrentTimeStamp()
          {
            return new Timestamp(getCalendar().getTime().getTime());
          }
    
          public static String convertToString(Timestamp dateData)
          {
            return convertToString(dateData, "yyyy/MM/dd");
          }
    
          public static String convertToString(Timestamp dateData, String pattern)
          {
            if (dateData == null)
            {
              return null;
            }
            return format(dateData, pattern);
          }
    
          public static Timestamp convertToTimestamp(String dateData)
          {
            if (StringUtils.isBlank(dateData)) {
              return null;
            }
            String yearString = dateData.substring(0, 4);
            String monthString = dateData.substring(4, 6);
            String dayString = dateData.substring(6, 8);
            int year = Integer.parseInt(yearString);
            int month = Integer.parseInt(monthString) - 1;
            int day = Integer.parseInt(dayString);
    
            Calendar cal = getCalendar();
            cal.set(year, month, day);
            cal.getTime();
            return new Timestamp(cal.getTime().getTime());
          }
    
          public static Date check(String dateData)
            throws ParseException
          {
            return check(dateData, "yyyyMMdd");
          }
    
          public static Date check(String dateString, String format)
            throws ParseException
          {
            if (dateString == null)
              throw new ParseException("date string to check is null", 0);
            if (format == null) {
              throw new ParseException("format string to check date is null", 0);
            }
            Date date = parseDate(dateString, format);
            if (!format(date, format).equals(dateString)) {
              throw new ParseException("Out of bound date:"" + dateString + "" with format "" + format + """, 0);
            }
            return date;
          }
    
          public static boolean isValid(String dateData)
            throws Exception
          {
            return isValid(dateData, "yyyyMMdd");
          }
    
          public static boolean isValid(String s, String format)
          {
            SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.KOREA);
            Date date = null;
            try
            {
              date = formatter.parse(s);
            }
            catch (ParseException e)
            {
              return false;
            }
            return formatter.format(date).equals(s);
          }
    
          public static String getDateString()
          {
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.KOREA);
            return formatter.format(new Date());
          }
    
          public static int getDay()
          {
            return getNumberByPattern("dd");
          }
    
          public static int getYear()
          {
            return getNumberByPattern("yyyy");
          }
    
          public static int getMonth()
          {
            return getNumberByPattern("MM");
          }
    
          public static int getNumberByPattern(String pattern)
          {
            return Integer.parseInt(formatCurrentDate(pattern));
          }
    
          public static String getFormatString(String pattern)
          {
            return formatCurrentDate(pattern);
          }
    
          public static String getShortDateString()
          {
            return formatCurrentDate("yyyyMMdd");
          }
    
          public static String getShortTimeString()
          {
            return formatCurrentDate("HHmmss");
          }
    
          public static String getTimeStampString()
          {
            return formatCurrentDate("yyyy-MM-dd-HH:mm:ss:SSS");
          }
    
          public static String getTimeString()
          {
            return formatCurrentDate("HH:mm:ss");
          }
    
          public static int whichDay(String s)
            throws ParseException
          {
            return whichDay(s, "yyyyMMdd");
          }
    
          public static int whichDay(String s, String format)
            throws ParseException
          {
            SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.KOREA);
            Date date = check(s, format);
            Calendar calendar = formatter.getCalendar();
            calendar.setTime(date);
            return calendar.get(7);
          }
    
          public static int daysBetween(String from, String to)
            throws ParseException
          {
            return daysBetween(from, to, "yyyyMMdd");
          }
    
          public static int daysBetween(String from, String to, String format)
            throws ParseException
          {
            Date d1 = check(from, format);
            Date d2 = check(to, format);
            long duration = d2.getTime() - d1.getTime();
            return (int)(duration / 86400000L);
          }
    
          public static int ageBetween(String from, String to)
            throws ParseException
          {
            return ageBetween(from, to, "yyyyMMdd");
          }
    
          public static int ageBetween(String from, String to, String format)
            throws ParseException
          {
            return daysBetween(from, to, format) / 365;
          }
    
          public static String addDays(String s, int day)
            throws ParseException
          {
            return addDays(s, day, "yyyyMMdd");
          }
    
          public static String addDays(String s, int day, String format)
            throws ParseException
          {
            SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.KOREA);
            Date date = check(s, format);
            date.setTime(date.getTime() + day * 1000L * 60L * 60L * 24L);
            return formatter.format(date);
          }
    
          public static String addMonths(String s, int month)
            throws Exception
          {
            return addMonths(s, month, "yyyyMMdd");
          }
    
          public static String addMonths(String s, int addMonth, String format)
            throws Exception
          {
            SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.KOREA);
            Date date = check(s, format);
            SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy", Locale.KOREA);
            SimpleDateFormat monthFormat = new SimpleDateFormat("MM", Locale.KOREA);
            SimpleDateFormat dayFormat = new SimpleDateFormat("dd", Locale.KOREA);
            int year = Integer.parseInt(yearFormat.format(date));
            int month = Integer.parseInt(monthFormat.format(date));
            int day = Integer.parseInt(dayFormat.format(date));
            month += addMonth;
            if (addMonth > 0) {
              while (month > 12)
              {
                month -= 12;
                year++;
              }
            }
            while (month <= 0)
            {
              month += 12;
              year--;
            }
            DecimalFormat fourDf = new DecimalFormat("0000");
            DecimalFormat twoDf = new DecimalFormat("00");
            String tempDate = String.valueOf(fourDf.format(year)) + String.valueOf(twoDf.format(month)) + String.valueOf(twoDf.format(day));
            Date targetDate = null;
            try
            {
              targetDate = check(tempDate, "yyyyMMdd");
            }
            catch (ParseException pe)
            {
              day = lastDay(year, month);
              tempDate = String.valueOf(fourDf.format(year)) + String.valueOf(twoDf.format(month)) + String.valueOf(twoDf.format(day));
              targetDate = check(tempDate, "yyyyMMdd");
            }
            return formatter.format(targetDate);
          }
    
          public static String addYears(String s, int year)
            throws ParseException
          {
            return addYears(s, year, "yyyyMMdd");
          }
    
          public static String addYears(String s, int year, String format)
            throws ParseException
          {
            SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.KOREA);
            Date date = check(s, format);
            date.setTime(date.getTime() + year * 1000L * 60L * 60L * 24L * 366L);
            return formatter.format(date);
          }
    
          public static int monthsBetween(String from, String to)
            throws ParseException
          {
            return monthsBetween(from, to, "yyyyMMdd");
          }
    
          public static int monthsBetween(String from, String to, String format)
            throws ParseException
          {
            Date fromDate = check(from, format);
            Date toDate = check(to, format);
            if (fromDate.compareTo(toDate) == 0)
              return 0;
            SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy", Locale.KOREA);
            SimpleDateFormat monthFormat = new SimpleDateFormat("MM", Locale.KOREA);
            SimpleDateFormat dayFormat = new SimpleDateFormat("dd", Locale.KOREA);
            int fromYear = Integer.parseInt(yearFormat.format(fromDate));
            int toYear = Integer.parseInt(yearFormat.format(toDate));
            int fromMonth = Integer.parseInt(monthFormat.format(fromDate));
            int toMonth = Integer.parseInt(monthFormat.format(toDate));
            int fromDay = Integer.parseInt(dayFormat.format(fromDate));
            int toDay = Integer.parseInt(dayFormat.format(toDate));
            int result = 0;
            result += (toYear - fromYear) * 12;
            result += toMonth - fromMonth;
            if (toDay - fromDay > 0)
              result += toDate.compareTo(fromDate);
            return result;
          }
    
          public static String lastDayOfMonth(String src)
            throws ParseException
          {
            return lastDayOfMonth(src, "yyyyMMdd");
          }
    
          public static String lastDayOfMonth(String src, String format)
            throws ParseException
          {
            SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.KOREA);
            Date date = check(src, format);
            SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy", Locale.KOREA);
            SimpleDateFormat monthFormat = new SimpleDateFormat("MM", Locale.KOREA);
            int year = Integer.parseInt(yearFormat.format(date));
            int month = Integer.parseInt(monthFormat.format(date));
            int day = lastDay(year, month);
            DecimalFormat fourDf = new DecimalFormat("0000");
            DecimalFormat twoDf = new DecimalFormat("00");
            String tempDate = String.valueOf(fourDf.format(year)) + String.valueOf(twoDf.format(month)) + String.valueOf(twoDf.format(day));
            date = check(tempDate, format);
            return formatter.format(date);
          }
    
          private static int lastDay(int year, int month)
            throws ParseException
          {
            int day = 0;
            switch (month)
            {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
              day = 31;
              break;
            case 2:
              if (year % 4 == 0)
              {
                if ((year % 100 == 0) && (year % 400 != 0))
                  day = 28;
                else
                  day = 29;
              }
              else {
                day = 28;
              }
              break;
            case 4:
            case 6:
            case 9:
            case 11:
            default:
              day = 30;
            }
    
            return day;
          }
    
          public static String format(long timeMillis, String format)
          {
            return format(new Date(timeMillis), format);
          }
    
          public static String format(Date date, Locale locale) {
            return DateFormat.getDateInstance(1, locale).format(date);
          }
    
          public static String formatCurrentDate(String format)
          {
            return createDateFormat(format).format(new Date());
          }
    
          public static String format(Date date, String format)
          {
            return createDateFormat(format).format(date);
          }
    
          public static String format(Calendar calendar, String format)
          {
            return format(calendar.getTime(), format);
          }
    
          public static String format(String dateString, String inFormat, String outFormat)
          {
            return format(parseDate(dateString, inFormat), outFormat);
          }
    
          public static String currdate(String format)
          {
            Calendar calendar = Calendar.getInstance();
            return format(calendar, format);
          }
    
          public static Date parseDate(String dateString, String format)
          {
            return new SimpleDateFormat(format).parse(dateString, new ParsePosition(0));
          }
    
          public static Calendar parseCalendar(String dateString, String format)
          {
            Date date = parseDate(dateString, format);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            return calendar;
          }
    
          public static int dateDiff(char c, Calendar calendar, Calendar calendar1)
          {
            if (c == 'y') {
              c = 'y';
            }
            else if (c == 'M') {
              c = 'M';
            }
            else if (c == 'h') {
              c = 'h';
            }
            else if (c == 'm') {
              c = 'm';
            }
            else if (c == 's')
              c = 's';
            else
              c = 'd';
            int i = calendar1.get(1);
            int j = calendar.get(1);
            int k = i - j;
            if (c == 'y')
              return k;
            int l = k * 12 + (calendar1.get(2) - calendar.get(2));
            if (c == 'M')
              return l;
            long l1 = calendar1.getTime().getTime();
            long l2 = calendar.getTime().getTime();
            long l3 = l1 - l2;
            if (c == 'h')
              return Long.valueOf(l3 / 3600000L).intValue();
            if (c == 'm')
              return Long.valueOf(l3 / 60000L).intValue();
            if (c == 's') {
              return Long.valueOf(l3 / 1000L).intValue();
            }
            return Long.valueOf(l3 / 86400000L).intValue();
          }
    
          public static int dateDiff(char c, Date date, Date date1)
          {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            Calendar calendar1 = Calendar.getInstance();
            calendar1.setTime(date1);
            return dateDiff(c, calendar, calendar1);
          }
    
          public static int dateDiff(char c, String s, String s1, String s2, String s3)
          {
            Calendar calendar = parseCalendar(s, s1);
            Calendar calendar1 = parseCalendar(s2, s3);
            return dateDiff(c, calendar, calendar1);
          }
    
          public static int dateDiff(char c, String s, String s1, String s2)
          {
            Calendar calendar = parseCalendar(s, s2);
            Calendar calendar1 = parseCalendar(s1, s2);
            return dateDiff(c, calendar, calendar1);
          }
    
          public static int dDay(char c, Calendar calendar)
          {
            Calendar calendar1 = Calendar.getInstance();
            return dateDiff(c, calendar1, calendar);
          }
    
          public static int dDay(char c, Date date)
          {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            return dDay(c, calendar);
          }
    
          public static int dDay(char c, String s, String s1)
          {
            Calendar calendar = parseCalendar(s, s1);
            return dDay(c, calendar);
          }
    
          public static Calendar dateAdd(char c, int i, Calendar calendar)
          {
            Calendar calendar1 = calendar;
            if (c == 'y') {
              calendar1.add(1, i);
            }
            else if (c == 'M') {
              calendar1.add(2, i);
            }
            else if (c == 'h') {
              calendar1.add(11, i);
            }
            else if (c == 'm') {
              calendar1.add(12, i);
            }
            else if (c == 's')
              calendar1.add(13, i);
            else
              calendar1.add(5, i);
            return calendar1;
          }
    
          public static Date dateAdd(char c, int i, Date date)
          {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            return dateAdd(c, i, calendar).getTime();
          }
    
          public static String dateAdd(char c, int i, String s, String s1)
          {
            Calendar calendar = parseCalendar(s, s1);
            return format(dateAdd(c, i, calendar), s1);
          }
    
          public static int getMonthlyDayCount(int i, int j)
          {
            byte byte0 = 0;
            if ((j == 4) || (j == 6) || (j == 9) || (j == 11)) {
              byte0 = 30;
            }
            else if (j == 2)
            {
              byte0 = 28;
              if (isYunYear(i))
                byte0 = 29;
            }
            else {
              byte0 = 31;
            }
            return byte0;
          }
    
          public static boolean isYunYear(int i)
          {
            boolean flag = false;
            if (i % 4 == 0) {
              if (i % 100 == 0)
              {
                if (i % 400 == 0)
                  flag = true;
              }
              else
                flag = true;
            }
            return flag;
          }
    
          public static String dateFormatChange(String periodDate, String format) {
            String dateStr = "";
    
            String dateFormat1 = "";
            String dateFormat2 = "";
            if (format.equals("MMDDYYYY")) {
              dateFormat1 = "MMddyyyy";
              dateFormat2 = "MM-dd-yyyy";
            } else if (format.equals("MMYYYY")) {
              dateFormat1 = "MMyyyy";
              dateFormat2 = "MM-yyyy";
            } else {
              dateFormat1 = "yyyy";
              dateFormat2 = "yyyy";
            }
            dateStr = date2String(string2Date(periodDate, dateFormat1), dateFormat2);
            return dateStr;
          }
    
          public static boolean dateAfter(String input, String target)
          {
            Calendar inputCal = parseCalendar(input, "yyyyMMdd");
            Calendar targetCal = parseCalendar(target, "yyyyMMdd");
            return inputCal.after(targetCal);
          }
    
          private static DateFormat createDateFormat(String pattern) {
            return createDateFormat(pattern, Locale.getDefault());
          }
    
          private static DateFormat createDateFormat(String pattern, Locale locale) {
            return new SimpleDateFormat(pattern, locale);
          }
    
        /**
         * 日期格式化
         *
         * @param
         * @return
         * @author lishuai
         * @date 2018/12/24 19:34
         */
        public static String getDataFormat(Date dt) {
            if (dt != null) {
                return DateUtils.date2String(dt, "yyyy-MM-dd HH:mm:ss");
            } else {
                return "";
            }
        }
    
    
        }
  • 相关阅读:
    记一次排查tomcat耗费CPU过高的经历
    记录一次PHP项目报502的问题
    工作职责与工作协调
    如何提升团队效率
    接手老项目的方法总结
    如何快速确定需求的技术实现方案
    PHP中的赋值-引用or传值?
    性能优化-开发流程中的性能优化
    一周阅读列表(20131111-20131117)
    一周阅读列表(20131104-20131110)
  • 原文地址:https://www.cnblogs.com/huyanlon/p/10641145.html
Copyright © 2011-2022 走看看