zoukankan      html  css  js  c++  java
  • 时间处理工具类DateUtils

    public class DateUtils
    {
            public static final String                            SHORT_DATE             = "yyyy-MM-dd";
            public static final String                            SHORT_DATE_US  = "yyyy-MM-dd";
            public static final String                            LONG_DATE              = "yyyy-MM-dd HH:mm:ss";
            public static final String                            YMDHM                  = "yyyy-MM-dd HH:mm";
            public static final String                            HM                             = "HH:mm";
            public static final SimpleDateFormat  DF_SHORT_CN            = new SimpleDateFormat(SHORT_DATE);
            public static final SimpleDateFormat  SDF_YMDHM              = new SimpleDateFormat(YMDHM);
            public static final SimpleDateFormat  SDF_HM                 = new SimpleDateFormat(HM);
            public static final SimpleDateFormat  DF_CN                  = new SimpleDateFormat(LONG_DATE);
            public static final int                                      REALTIME               = 0;
     
            public static final int                                      HOURLY                 = 1;
            public static final int                                      DAILY                  = 2;
            public static final int                                      BIWEEKLY               = 3;
            public static final int                                      WEEKLY                 = 4;
            public static final int                                      MONTHLY                = 5;
            public static final int                                      QUARTLY                = 6;
            public static final int                                      BIYEARLY               = 7;
            public static final int                                      YEARLY                 = 8;
     
            public static final long                              day                            = 86400000l;
     
            private DateUtils()
            {
            }
     
            /**
             * Calendar -> String
             */
            public static String format(Calendar cal)
            {
                   return format(cal.getTime());
            }
     
            /**
             * Calendar,String -> String
             */
            public static String format(Calendar cal, String pattern)
            {
                   return format(cal.getTime(), pattern);
            }
     
            /**
             * Calendar,DateFormat -> String
             */
            public static String format(Calendar cal, DateFormat df)
            {
                   return format(cal.getTime(), df);
            }
     
            /**
             * Date -> String
             */
            public static String format(Date date)
            {
                   return format(date, DF_CN);
            }
     
            /**
             * Date,String -> String
             */
            public static String format(Date date, String pattern)
            {
                   SimpleDateFormat df = new SimpleDateFormat(pattern);
                   return format(date, df);
            }
     
            public static String format(long ts, DateFormat df)
            {
                   return format(new Date(ts), df);
            }
            
            public static String format(long ts, String format,Locale local)
            {
                   SimpleDateFormat df = new SimpleDateFormat(format, local);
                   return format(new Date(ts), df);
            }
     
            /**
             * Date,DateFormat -> String
             */
            public static String format(Date date, DateFormat df)
            {
    //             if (date == null)
    //                     return "";
    //
    //             if (df != null)
    //             {
    //                     return df.format(date);
    //             }
    //             return DF_CN.format(date);
                   if(date==null)return "";
                   return getRealDateFormat(df).format(date);
            }
     
            public static long getGapMin(long minsec)
            {
                   return minsec / 60000;
            }
     
            public static long getGapMinByAddtime(long addtime)
            {
                   return getGapMinByAddtime(addtime, System.currentTimeMillis());
            }
     
            public static long getGapMinByAddtime(long addtime, long current)
            {
                   return getGapMin(current - addtime);
            }
     
            public static String getGapMinStirngByAddtime(long addtime, long current)
            {
                   return getMinStirngBySubTime(getGapMin(current - addtime));
            }
     
            public static String getMinStirngBySubTime(long min)
            {
                   long hour = min / 60;
                   long restmin = min % 60;
                   return (hour > 0 ? hour + "时" : "") + restmin + "分";
            }
     
            public static Calendar parseDateString(String str, String format)
            {
                   if (str == null)
                   {
                           return null;
                   }
                   Date date = null;
                   SimpleDateFormat df = new SimpleDateFormat(format);
                   try
                   {
                           date = getRealDateFormat(df).parse(str);
                   }
                   catch (Exception ex)
                   {
     
                   }
                   if (date == null)
                   {
                           return null;
                   }
                   Calendar cal = Calendar.getInstance();
                   cal.setTime(date);
                   return cal;
            }
     
            /**
             * returns the current date in the default format
             */
            public static String getToday()
            {
                   return format(new Date());
            }
     
            public static Date getYesterday()
            {
                   Calendar cal = Calendar.getInstance();
                   cal.add(Calendar.DATE, -1);
     
                   return cal.getTime();
            }
     
            public static Calendar getFirstDayOfMonth()
            {
                   Calendar cal = getNow();
                   cal.set(Calendar.DAY_OF_MONTH, 1);
                   cal.set(Calendar.HOUR_OF_DAY, 0);
                   cal.set(Calendar.MINUTE, 0);
                   cal.set(Calendar.SECOND, 0);
     
                   return cal;
            }
            /**
             * 获取某月的第一天
             * @param month
             * @return Calendar
             * */
            public static Calendar getFirstDayOfMonth(int month)
            {
                   Calendar cal = Calendar.getInstance();
                   cal.set(Calendar.MONTH, month);
                   cal.set(Calendar.DAY_OF_MONTH, 1);
                   cal.set(Calendar.HOUR_OF_DAY, 0);
                   cal.set(Calendar.MINUTE, 0);
                   cal.set(Calendar.SECOND, 0);
     
                   return cal;
            }
     
            public static Calendar getNow()
            {
                   return Calendar.getInstance();
            }
     
            /**
             * add some month from the date
             */
            public static Date addMonth(Date date, int n) throws Exception
            {
                   Calendar cal = getNow();
                   cal.setTime(date);
                   cal.add(Calendar.MONTH, n);
                   return cal.getTime();
            }
     
            public static int daysBetween(Date returnDate)
            {
                   return daysBetween(null, returnDate);
            }
     
            public static long tirmDay(Calendar time)
            {// 得到当天的0点时间
                   time.set(Calendar.HOUR_OF_DAY, 0);
                   time.set(Calendar.MINUTE, 0);
                   time.set(Calendar.SECOND, 0);
                   time.set(Calendar.MILLISECOND, 0);
                   return time.getTimeInMillis();
            }
     
            public static int daysBetween(Date now, Date returnDate)
            {
                   if (returnDate == null)
                           return 0;
     
                   Calendar cNow = getNow();
                   Calendar cReturnDate = getNow();
                   if (now != null)
                   {
                           cNow.setTime(now);
                   }
                   cReturnDate.setTime(returnDate);
                   setTimeToMidnight(cNow);
                   setTimeToMidnight(cReturnDate);
                   long nowMs = cNow.getTimeInMillis();
                   long returnMs = cReturnDate.getTimeInMillis();
                   return millisecondsToDays(nowMs - returnMs);
            }
     
            private static int millisecondsToDays(long intervalMs)
            {
                   return (int) (intervalMs / (1000 * 86400));
            }
     
            private static void setTimeToMidnight(Calendar calendar)
            {
                   calendar.set(Calendar.HOUR_OF_DAY, 0);
                   calendar.set(Calendar.MINUTE, 0);
                   calendar.set(Calendar.SECOND, 0);
            }
     
            public static String formatDate(Object obj, String format)
            {
                   String result = "";
                   try
                   {
                           Date date = (Date) obj;
                           result = format(date, format);
                   }
                   catch (Exception e)
                   {
     
                   }
                   return result;
            }
     
            public static String formatDate(Object obj)
            {
                   return formatDate(obj, SHORT_DATE);
            }
     
            public static String getSunday(String date)
            {
                   Calendar c = DateUtils.parseDateString(date, "yyyy-MM-dd");
                   int dayofweek = c.get(Calendar.DAY_OF_WEEK) - 1;
                   if (dayofweek == 0)
                   {
                           dayofweek = 0;
                   }
                   c.add(Calendar.DATE, -dayofweek);
                   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                   return sdf.format(c.getTime());
            }
     
            public static Calendar getStartTime(Calendar calendar, int interval)
            {
                   if (calendar == null)
                           return null;
                   Calendar fromtime = Calendar.getInstance();
                   fromtime.setTimeZone(calendar.getTimeZone());
                   fromtime.set(Calendar.MILLISECOND, 0);
                   int y = calendar.get(Calendar.YEAR);
                   int m = calendar.get(Calendar.MONTH);
                   int d = calendar.get(Calendar.DAY_OF_MONTH);
                   if (interval == DAILY || interval == HOURLY)
                   {
                           fromtime.set(y, m, d, 0, 0, 0);
                   }
                   else if (interval == WEEKLY)
                   {
                           fromtime.set(y, m, d, 0, 0, 0);
                           fromtime.add(Calendar.DATE, 1 + Calendar.SUNDAY - fromtime.get(Calendar.DAY_OF_WEEK));
                   }
                   else if (interval == MONTHLY)
                   {
                           fromtime.set(y, m, 1, 0, 0, 0);
                   }
                   else if (interval == BIWEEKLY)
                   {
                           fromtime.set(y, m, d, 0, 0, 0);
                           fromtime.add(Calendar.WEEK_OF_YEAR, (-1) * (fromtime.get(Calendar.WEEK_OF_YEAR) + 1) % 2);
                           fromtime.add(Calendar.DATE, Calendar.SUNDAY - fromtime.get(Calendar.DAY_OF_WEEK));
                   }
                   else if (interval == YEARLY)
                   {
                           fromtime.set(y, m, d, 0, 0, 0);
                   }
                   else if (interval == QUARTLY)
                   {
                           fromtime.set(y, (m / 3) * 3, 1, 0, 0, 0);
                   }
                   else if (interval == BIYEARLY)
                   {
                           fromtime.set(y, (m / 6) * 6, 1, 0, 0, 0);
                   }
                   return fromtime;
            }
     
            public static Calendar getEndTime(Calendar calendar, int interval)
            {
                   if (calendar == null)
                           return null;
                   Calendar endtime = Calendar.getInstance();
                   endtime.setTimeZone(calendar.getTimeZone());
                   endtime.set(Calendar.MILLISECOND, 0);
                   int y = calendar.get(Calendar.YEAR);
                   int m = calendar.get(Calendar.MONTH);
                   int d = calendar.get(Calendar.DAY_OF_MONTH);
                   if (interval == DAILY)
                   {
                           endtime.set(y, m, d, 0, 0, 0);
                           endtime.add(Calendar.DAY_OF_MONTH, 1);
                   }
                   else if (interval == WEEKLY)
                   {
                           endtime.set(y, m, d, 0, 0, 0);
                           endtime.add(Calendar.DATE, 2 + Calendar.SATURDAY - endtime.get(Calendar.DAY_OF_WEEK));
                   }
                   else if (interval == MONTHLY)
                   {
                           endtime.set(y, m, 1, 0, 0, 0);
                           endtime.add(Calendar.MONTH, 1);
                   }
                   else if (interval == BIWEEKLY)
                   {
                           endtime.set(y, m, d, 0, 0, 0);
                           endtime.add(Calendar.WEEK_OF_YEAR, endtime.get(Calendar.WEEK_OF_YEAR) % 2);
                           endtime.add(Calendar.DATE, 1 + Calendar.SATURDAY - endtime.get(Calendar.DAY_OF_WEEK));
                   }
                   else if (interval == YEARLY)
                   {
                           endtime.set(y + 1, m, d, 0, 0, 0);
                   }
                   else if (interval == QUARTLY)
                   {
                           if (m / 3 == 3)
                           {
                                   endtime.set(y + 1, 0, 1, 0, 0, 0);
                           }
                           else
                           {
                                   endtime.set(y, (m / 3 + 1) * 3, 1, 0, 0, 0);
                           }
                   }
                   else if (interval == BIYEARLY)
                   {
                           if (m / 6 == 1)
                           {
                                   endtime.set(y + 1, 0, 1, 0, 0, 0);
                           }
                           else
                           {
                                   endtime.set(y, (m / 6 + 1) * 6, 1, 0, 0, 0);
                           }
                   }
                   return endtime;
            }
     
            public static long getDays(String startdate, String enddate, String format)
            {
                   Calendar s1 = DateUtils.parseDateString(startdate, format);
                   Calendar s2 = DateUtils.parseDateString(enddate, format);
                   if (s1 != null && s2 != null)
                   {
                           return getDays(s1.getTimeInMillis(), s2.getTimeInMillis());
                   }
                   return 0;
            }
     
            public static long getMonthDays(String date, String format)
            {
                   Calendar cal = DateUtils.parseDateString(date, format);
                   if (cal != null)
                   {
                           Calendar starttime = DateUtils.getStartTime(cal, DateUtils.MONTHLY);
                           Calendar endtime = DateUtils.getEndTime(cal, DateUtils.MONTHLY);
                           return getDays(starttime.getTimeInMillis(), endtime.getTimeInMillis());
                   }
                   return 0;
            }
     
            public static long getDays(long startdate, long enddate)
            {
                   return (enddate - startdate) / day;
            }
     
            public static String format(Long l, String pattern)
            {
                   if(l==null)return "";
                   Calendar cal = Calendar.getInstance();
                   cal.setTimeInMillis(l);
                   return format(cal.getTime(), pattern);
            }
            
            public static DateFormat getRealDateFormat(DateFormat df)
            {
                   return df==null?new SimpleDateFormat(SHORT_DATE_US,Locale.US):df;
            }
     
            //smdate="2004-03-26 13:31:40"
            //bdate="2004-03-26 11:30:24
        public static String daysBetween(String smdate,String bdate,String formate) throws ParseException
        {
            SimpleDateFormat df = new SimpleDateFormat(formate);
                   Date now=null;
                   Date date=null;
                   String result="";
                   try {
                           now = df.parse(smdate);
                           date = df.parse(bdate);
                            long l=now.getTime()-date.getTime();
                            long day=l/(24*60*60*1000);
                            long hour=(l/(60*60*1000)-day*24);
                            long min=((l/(60*1000))-day*24*60-hour*60);
                            long s=(l/1000-day*24*60*60-hour*60*60-min*60);
                            //System.out.println(""+day+"天"+hour+"小时"+min+"分"+s+"秒");
                            result= day==0?"":day+"天";
                            result+=hour==0?"":hour+"小时";
                            result+=min==0?"":min+"分";
                            result+=s==0?"":s+"秒";
                   } catch (ParseException e) {
                           // TODO Auto-generated catch block
                           result="";
                   }
                   return result;
        }  
        
        /**
         * 获取当前月与之前的N-1个月份
         * @param n 获取月份数
         * @return 'yyyy-MM'
         * */
        public static List<String> getCurrentMonths(int n){
                   List<String> months=new ArrayList<String>();
                   for(int i=n-1;i>=0;i--){
                           Calendar cal = Calendar.getInstance();
                           cal.add(Calendar.MONTH,i-n+1);
                       int month = cal.get(Calendar.MONTH) + 1;
                       int year = cal.get(Calendar.YEAR);
                       months.add(year+""+(month<10?"0"+month:""+month));
                   }
                   return months;
            }
        /**
         * 获取某年最后一天
         * @param year int
         * @return Date
         * */
        public static Date getCurrYearLast(int year){
                   Calendar calendar = Calendar.getInstance();
                   calendar.clear();
                   calendar.set(Calendar.YEAR, year);
                   calendar.roll(Calendar.DAY_OF_YEAR, -1);
                   Date currYearLast = calendar.getTime();
                   
                   return currYearLast;
            }    
    }
  • 相关阅读:
    重新想象 Windows 8 Store Apps (15) 控件 UI: 字体继承, Style, ControlTemplate, SystemResource, VisualState, VisualStateManager
    重新想象 Windows 8 Store Apps (12) 控件之 GridView 特性: 拖动项, 项尺寸可变, 分组显示
    返璞归真 asp.net mvc (10) asp.net mvc 4.0 新特性之 Web API
    与众不同 windows phone (29) Communication(通信)之与 OData 服务通信
    与众不同 windows phone (33) Communication(通信)之源特定组播 SSM(Source Specific Multicast)
    与众不同 windows phone (27) Feature(特性)之搜索的可扩展性, 程序的生命周期和页面的生命周期, 页面导航, 系统状态栏
    与众不同 windows phone (30) Communication(通信)之基于 Socket TCP 开发一个多人聊天室
    返璞归真 asp.net mvc (12) asp.net mvc 4.0 新特性之移动特性
    重新想象 Windows 8 Store Apps (2) 控件之按钮控件: Button, HyperlinkButton, RepeatButton, ToggleButton, RadioButton, CheckBox, ToggleSwitch
    重新想象 Windows 8 Store Apps (10) 控件之 ScrollViewer 特性: Chaining, Rail, Inertia, Snap, Zoom
  • 原文地址:https://www.cnblogs.com/yzuzhang/p/4720027.html
Copyright © 2011-2022 走看看