时间工具 java

package com.cin.base.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

public class DateUtil {
    public static String formatDateTime(Date date,String format){   
        if (date==null) return "";   
        if (format==null) return date.toString();   
        DateFormat df = new SimpleDateFormat(format);   
        return df.format(date);   
    }   
    public static String formatY0M0D(Date date){   
        return date==null?"":formatDateTime(date,"yyyyMMdd");   
    }   
    public static String formatYMD(Date date){   
        return date==null?"":formatDateTime(date,"yyyy-MM-dd");   
    }   
    public static String formatYMDHM(Date date){   
        return date==null?"":formatDateTime(date,"yyyy-MM-dd HH:mm");   
    }   
    public static String formatDateTimeByDate(Date date){   
        return date==null?"":formatDateTime(date,"yyyy-MM-dd HH:mm:ss");   
    }  
    public static String formatTimeStampByDate(Date date){   
        return date==null?"":formatDateTime(date,"yyyy-MM-dd HH:mm:ss.SSS");   
    }
    public static String formatTimeStampSByDate(Date date){   
        return date==null?"":formatDateTime(date,"yyyy-MM-dd HH:mm:ss.S");   
    }
    public static boolean showNew(Date time){   
        if (time==null) return false;   
        return DateUtil.addDays(time,3).compareTo(new Date())>=0;   
    }      
    public static Date addDays(Date srcDate, int addDays)   
    {   
        return getNextDayFromCurrent(srcDate,addDays);   
    }       
    public static Date addMinutes(Date srcDate, int minutes)   
    {   
        Calendar cal = Calendar.getInstance();   
        cal.setTime(srcDate);   
        cal.add(Calendar.MINUTE, minutes);   
        return cal.getTime();   
    }          
       
    public static Date getNextDayFromCurrent(Date currDate,int i){   
        GregorianCalendar gc = new GregorianCalendar();   
        gc.setTime(currDate);   
        gc.add(GregorianCalendar.DATE, i);   
        return gc.getTime();   
    }   
    
    public static Date getNextMonthFromCurrent(Date current,int i){   
        GregorianCalendar gc = new GregorianCalendar();   
        gc.setTime(current);   
        gc.add(GregorianCalendar.MONTH, i);   
        return gc.getTime();   
    }   
    
    public static Date getNextWeekFromCurrent(Date current,int i){   
        GregorianCalendar gc = new GregorianCalendar();   
        gc.setTime(current);   
        gc.add(GregorianCalendar.WEEK_OF_YEAR, i);   
        return gc.getTime();   
    }   
    
    public static Date getNextYearFromCurrent(Date current,int i){   
        GregorianCalendar gc = new GregorianCalendar();   
        gc.setTime(current);   
        gc.add(GregorianCalendar.YEAR, i);   
        return gc.getTime();   
    }   
    
    public static Date getNextHourFromCurrent(Date current,int i){   
        GregorianCalendar gc = new GregorianCalendar();   
        gc.setTime(current);   
        gc.add(GregorianCalendar.HOUR, i);   
        return gc.getTime();   
    }   
    
    public static int getCurrDay(){   
        Calendar now = Calendar.getInstance();   
        return now.get(Calendar.DAY_OF_WEEK);   
    }   
       
       
    public static Date StrToDate(String str,String format){   
        if (str == null || "".equals(str)) {
            return null;
        }
        try{   
            if(format == null || "".equals(format))   
                format = "yyyy-MM-dd";   
            java.text.SimpleDateFormat sdf = new SimpleDateFormat(format);   
            return sdf.parse(str);   
        }catch(ParseException pe){  
            pe.printStackTrace();
            return null;   
        }   
    }  

        
       
    public static Date StrToDate(String str){   
        return StrToDate(str,"yyyy-MM-dd");   
    }   
    
    public static long getNumOfDays(String date1,String date2){   
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");   
        Date d1;   
        try {   
            d1 = df.parse(date1);   
            Date d2 = df.parse(date2);   
            long diff = Math.abs(d2.getTime()-d1.getTime());   
            return (long)(diff/(1000*60*60*24));   
        } catch (ParseException e) {   
            e.printStackTrace();   
        }   
        return 0;   
    }   
    
       
    public static boolean compare(Date d1,Date d2)   
    {   
        if((d2.getTime()-d1.getTime())>600000l){   
            return true;   
        }   
        return false;   
    }      
       
       
    @SuppressWarnings("deprecation")   
    public static String getTheDay(Date d){   
        return "日一二三四五六".charAt(d.getDay())+"";   
    }   
       
       
    public static String []  weekDate(int year ,int week){   
        if(week<1||week>52)return null;   
        String s [] = new String [2];   
        Calendar c = Calendar.getInstance();   
        c.set(Calendar.YEAR, year);   
        c.set(Calendar.WEEK_OF_YEAR, week);   
        c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);   
        s[0] = formatYMD(c.getTime());   
        c.add(Calendar.DATE, 6);   
        s[1] = formatYMD(c.getTime());   
        return s;   
           
    }   
       
    public static String []  monthDate(int year ,int month){   
        if(month<1||month>12) return null;   
        String s [] = new String [2];   
        Calendar c = Calendar.getInstance();   
        c.set(Calendar.YEAR, year);   
        c.set(Calendar.MONTH, month-1);   
        c.set(Calendar.DAY_OF_MONTH, 1);   
        s[0] = formatYMD(c.getTime());   
        c.add(Calendar.MONTH, 1);   
        c.add(Calendar.DATE, -1);   
        s[1] = formatYMD(c.getTime());   
        return s;   
           
    }   
       
    public static String []  seasonDate(int year ,int season){   
        if(season<1||season>4)return null;   
        String y= String.valueOf(year);   
        String []s = new String [2];   
        switch(season){   
        case 1 : s[0]= y+"-01-01";s[1]= y+"-03-31";break;   
        case 2 : s[0]= y+"-04-01";s[1]= y+"-06-30";break;   
        case 3 : s[0]= y+"-07-01";s[1]= y+"-09-30";break;   
        case 4 : s[0]= y+"-10-01";s[1]= y+"-12-31";break;   
        }   
        return s;   
           
    }
    
   
    public static Date getFirstDayOfWeek(Date someDay) {
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setTime(someDay);
        calendar.set(Calendar.HOUR_OF_DAY, 0);   
        calendar.set(Calendar.MINUTE, 0);   
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
        return calendar.getTime();
    }
    
   
    public static Date getLastDatetimeOfWeek(Date someDay) {
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setTime(someDay);
        calendar.set(Calendar.HOUR_OF_DAY, 23);   
        calendar.set(Calendar.MINUTE, 59);   
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        calendar.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY);
        return calendar.getTime();
    }
    
   
    public static Date getFirstDayOfMonth(Date someDay) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(someDay);
        calendar.set(Calendar.HOUR_OF_DAY, 0);   
        calendar.set(Calendar.MINUTE, 0);   
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.DAY_OF_MONTH,1);
        return calendar.getTime();
    }
   
    public static Date getNextDayCurrDay(Date currDate,int i){   
        GregorianCalendar gc = new GregorianCalendar();   
        gc.setTime(currDate);   
        gc.add(GregorianCalendar.DATE, i);   
        return gc.getTime();   
    }   
    
   
    public static Date getBeginOfDay(Date someDay) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(someDay);
        calendar.set(Calendar.HOUR_OF_DAY, 0);   
        calendar.set(Calendar.MINUTE, 0);   
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();        
    }
    
    public static Date[] getDaysInInterval(Date beginDate, Date endDate) {
        List days = new ArrayList();
        //日期回滚一天,也就是最后一天        
        int dateLength = (int) ((endDate.getTime()-beginDate.getTime())/(24*60*60*1000));  ;
        
        
        GregorianCalendar calendar = new GregorianCalendar();   
        calendar.setTime(beginDate);   
        for (int i = 0; i <= dateLength; i++) {
            calendar.add(GregorianCalendar.DATE, 0 != i ? 1 : 0);  
            days.add(calendar.getTime());
        }
        return days.toArray(new Date[days.size()]);
    }
    
   
    public static Date[] getDaysInWeek(Date someDay) {
        List daysInWeek = new ArrayList();
        Date firstDay = getFirstDayOfWeek(someDay);
        GregorianCalendar calendar = new GregorianCalendar();   
        calendar.setTime(firstDay);   
        for (int i = 0; i < 7; i++) {
            calendar.add(GregorianCalendar.DAY_OF_WEEK, 0 != i ? 1 : 0);  
            daysInWeek.add(calendar.getTime());
        }
        return daysInWeek.toArray(new Date[daysInWeek.size()]);
    }
    
  
    public static Date[] getSevernDaysPrior(Date someDay) {
        List daysInWeek = new ArrayList();
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(someDay);
        calendar.add(GregorianCalendar.DATE, -7);  
        calendar.setTime(calendar.getTime());
        for (int i = 0; i < 7; i++) {
            calendar.add(GregorianCalendar.DATE, 1);  
            daysInWeek.add(calendar.getTime());
        }
        return daysInWeek.toArray(new Date[daysInWeek.size()]);
    }
    
    
   
    public static Date[] getDaysInMonth(Date someDay) {
        List daysInMonth = new ArrayList();
        Date firstDay = getFirstDayOfMonth(someDay);
        GregorianCalendar calendar = new GregorianCalendar();   
        calendar.setTime(firstDay);  
        for (int i = 0; i < getDaysCountOfMonth(someDay); i++) {
            calendar.add(GregorianCalendar.DAY_OF_MONTH, 0 != i ? 1 : 0);  
            daysInMonth.add(calendar.getTime());
        }
        return daysInMonth.toArray(new Date[daysInMonth.size()]);        
    }
    
   
    public static Date[] splitDayByHour(Date someDay) {
        List dates = new ArrayList();
        Date begin = getBeginOfDay(someDay);
        GregorianCalendar calendar = new GregorianCalendar();   
        calendar.setTime(begin);   
        for (int i = 0; i < 24; i++) {
            calendar.add(GregorianCalendar.HOUR_OF_DAY, 0 != i ? 1 : 0);  
            dates.add(calendar.getTime());
        }
        return dates.toArray(new Date[dates.size()]);        
    }
    
   
    public static Date[] splitDayByThreeHour(Date someDay) {
        List dates = new ArrayList();
        Date begin = getBeginOfDay(someDay);
        GregorianCalendar calendar = new GregorianCalendar();   
        calendar.setTime(begin);   
        for (int i = 0; i < 8; i++) {
            calendar.add(GregorianCalendar.HOUR_OF_DAY, 0 != i ? 3 : 0);  
            dates.add(calendar.getTime());
        }
        return dates.toArray(new Date[dates.size()]);        
    }
    
   
    public static Date getFirstDayOfYear(Date someDay) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(someDay);
        calendar.set(Calendar.HOUR_OF_DAY, 0);   
        calendar.set(Calendar.MINUTE, 0);   
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.DAY_OF_YEAR, 1);
        return calendar.getTime();        
    }
    
   
    public static Date[] splitYearByMonth(Date someDay) {
        List dates = new ArrayList();
        Date fristDay = getFirstDayOfYear(someDay);
        GregorianCalendar calendar = new GregorianCalendar();   
        calendar.setTime(fristDay);   
        for (int i = 0; i < 12; i++) {
            calendar.add(GregorianCalendar.MONTH, 0 != i ? 1 : 0);  
            dates.add(calendar.getTime());
        }
        return dates.toArray(new Date[dates.size()]);        
    }
    
   
    public static int getDaysCountOfMonth(Date someDay) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(someDay);
        //把日期设置为当月第一天   
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        //日期回滚一天,也就是最后一天        
        calendar.roll(Calendar.DAY_OF_MONTH, -1);
        return calendar.get(Calendar.DATE);
    }
    
    public static Date getLastDayOfMonth(Date someDay) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(someDay);
        //把日期设置为当月第一天   
        calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + 1);
        calendar.set(Calendar.DATE, 1);
        //日期回滚一天,也就是最后一天        
        calendar.add(Calendar.DATE, -1);  
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
        System.out.println(format.format(calendar.getTime()));  
        return calendar.getTime();
    }

   
    public static int getDaysBetween(Date start,Date end){   
        long diff = Math.abs(end.getTime()-start.getTime());   
        return (int)(diff/(1000*60*60*24));   
    }   

    
    public static Date addHours(Date srcDate, int hours)   
    {   
        Calendar cal = Calendar.getInstance();   
        cal.setTime(srcDate);   
        cal.add(Calendar.HOUR, hours);   
        return cal.getTime();   
    }   

    public static Date addWeeks(Date srcDate, int weeks)   
    {   
        Calendar cal = Calendar.getInstance();   
        cal.setTime(srcDate);   
        cal.add(Calendar.WEEK_OF_MONTH, weeks);   
        return cal.getTime();   
    }
    
    public static Date addMonth(Date srcDate, int month)   
    {   
        Calendar cal = Calendar.getInstance();   
        cal.setTime(srcDate);   
        cal.add(Calendar.MONTH, month);   
        return cal.getTime();   
    }
    
   
    public static Date[] getDateArrays(Date start, Date end, String type) {
      List dates = new ArrayList();
      Calendar calendar = Calendar.getInstance();
      calendar.setTime(start);
//      Date tmpDate = calendar.getTime();
//      long endTime = end.getTime();
      Date firstDay = null;
      Date lastDay = null;
      if(type.equals("HOUR")){
          int days = getDaysBetween(start,end);
          int average = days*24/12;
          firstDay = getBeginOfDay(start);
          for(int i=0;i<=12;i++){
              dates.add(addHours(firstDay,average*i));
          }
      }else if(type.equals("DAY")){
          int days = getDaysBetween(start,end) + 1;
          for(int i=0;i
              dates.add(addDays(start,i));
          }
      }else if(type.equals("WEEK")){
          firstDay = getFirstDayOfWeek(start);
          lastDay = getFirstDayOfWeek(end);
          dates.add(start);           
          while(firstDay.before(lastDay)){
              firstDay = addDays(firstDay,7);
              dates.add(firstDay);
          }         
          if(lastDay.before(end)){
              dates.add(end);
          }else{
              dates.add(lastDay);
          }
      }else if(type.equals("MONTH")){
          firstDay = getFirstDayOfMonth(start);
          lastDay = getFirstDayOfMonth(end);  
          dates.add(start);
          while(firstDay.before(lastDay)){
              firstDay = addMonth(firstDay,1);
              dates.add(firstDay);
          }
          if(lastDay.before(end)){
              dates.add(end);
          }else{
              dates.add(lastDay);
          }
      }
//      while (tmpDate.before(end) || tmpDate.getTime() == endTime) {
//        ret.add(calendar.getTime());
//        calendar.add(Calendar.DAY_OF_MONTH, 1);
//        tmpDate = calendar.getTime();
//      }
//      Date[] dates = new Date[ret.size()];
//      return (Date[]) ret.toArray(dates);
      return dates.toArray(new Date[dates.size()]);
    }
 
   
    public static Date getEndOfDay(Date someDay) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(someDay);
        calendar.set(Calendar.HOUR_OF_DAY, 23);   
        calendar.set(Calendar.MINUTE, 59);   
        calendar.set(Calendar.SECOND, 59);
        return calendar.getTime();        
    }
 
    public static List getDatesBetween(Date start,Date end){
        List dateList = new ArrayList();
        int days = getDaysBetween(start, end);
        for (int i = 0; i <= days; i++) {
            dateList.add(addDays(start, i));
        }
        return dateList;
    }
    
   
    public static List> getDateArrays(Date start, Date end) {
        List>  weeks = new ArrayList>();
        Calendar c_begin = Calendar.getInstance();
        c_begin.setTime(start);
        Calendar c_end = Calendar.getInstance();
        c_end.setTime(end);
        int count = 1;
        c_end.add(Calendar.DAY_OF_YEAR, 1);  //结束日期下滚一天是为了包含最后一天
        List week = new ArrayList();
        while(c_begin.before(c_end)){
            week.add(c_begin.getTime());
            if(c_begin.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){
                count++;
                weeks.add(week);
                week = new ArrayList();
            }
            c_begin.add(Calendar.DAY_OF_YEAR, 1);
        }
        return weeks;
    }
    
   
    public static List> getMonthDateArrays(Date start, Date end) {
        List>  months = new ArrayList>();
        Date firstDayOfBeginTimeMonth = DateUtil.getFirstDayOfMonth(end);//今天所在月的第一天
        String firstDayOfBeginTimeMonthStr = DateUtil.formatDateTime(firstDayOfBeginTimeMonth, "yyyy-MM-dd");
        String[] arr1 = firstDayOfBeginTimeMonthStr.split("-");
        String yearStr1 = arr1[0];
        int year1 = 0;
        if(yearStr1 != null){
            year1 = Integer.parseInt(yearStr1);
        }
        String monthStr1 = arr1[1];
        int month1 = 0;
        if(monthStr1 != null){
            month1 = Integer.parseInt(monthStr1);
        }
        Date firstDayOfCreateTimeMonth = DateUtil.getFirstDayOfMonth(start);//获取创建用户所在月的第一天
        String firstDayOfCreateTimeMonthStr = DateUtil.formatDateTime(firstDayOfCreateTimeMonth, "yyyy-MM-dd");
        String[] arr2 = firstDayOfCreateTimeMonthStr.split("-");
        String yearStr2 = arr2[0];
        int year2 = 0;
        if(yearStr2 != null){
            year2 = Integer.parseInt(yearStr2);
        }
        String monthStr2 = arr2[1];
        int month2 = 0;
        if(monthStr2 != null){
            month2 = Integer.parseInt(monthStr2);
        }
        if(year2 == year1){//用户创建时间和当前时间在同一年
            for(int i = month2;i < (month1+1);i++){
                List dateList = new ArrayList();
                String[] s = DateUtil.monthDate(year2, i);//获取得某年的第几月的起始日期和结束日期-[0]起始日期 [1]结束日期  
                for(int index = 0;index
                    Date date = new Date();
                    date = StrToDate(s[index]);
                    if(i == month2 && index == 0){
                        dateList.add(start);
                    }else if(i == month1 && index == 1){
                        dateList.add(end);
                    }
                    else {
                        dateList.add(date);
                    }
                }
                months.add(dateList);
            }
        }else {
            if(year2 < year1){//用户创建时间和当前时间不在同一年,如2013--2014
                int num = year1 - year2;
                for(int i = month2;i < 13;i++){
                    List dateList = new ArrayList();
                    String[] s = DateUtil.monthDate(year2, i);//获取得某年的第几月的起始日期和结束日期-[0]起始日期 [1]结束日期  
                    for(int index = 0;index
                        Date date = new Date();
                        date = StrToDate(s[index]);
                        if(i == month2 && index == 0){
                            dateList.add(start);
                        }else if(i == month1 && index == 1){
                            dateList.add(end);
                        }
                        else {
                            dateList.add(date);
                        }
                    }
                    months.add(dateList);
                }
                if(num > 1){
                    for(int i = year2+1 ;i < year1;i++){
                        for(int j = 1;j < 13;j++){
                            List dateList = new ArrayList();
                            String[] s = DateUtil.monthDate(i, j);//获取得某年的第几月的起始日期和结束日期-[0]起始日期 [1]结束日期
                            for(int index = 0;index
                                Date date = new Date();
                                date = StrToDate(s[index]);
                                if(date.getTime()>start.getTime() && date.getTime()
                                    dateList.add(date);
                                }
                            }
                            months.add(dateList);
                        }
                    }
                }
                for(int i = 1;i < month1+1;i++){
                    List dateList = new ArrayList();
                    String[] s = DateUtil.monthDate(year1, i);//获取得某年的第几月的起始日期和结束日期-[0]起始日期 [1]结束日期  
                    for(int index = 0;index
                        Date date = new Date();
                        date = StrToDate(s[index]);
                        if(i == month2 && index == 0){
                            dateList.add(start);
                        }else if(i == month1 && index == 1){
                            dateList.add(end);
                        }
                        else {
                            dateList.add(date);
                        }
                    }
                    months.add(dateList);
                }
            }
        }
    
        return months;
    }

}  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值