zoukankan      html  css  js  c++  java
  • java日期公共类

      1 package com.mall.common;
      2 
      3 import java.text.ParseException;
      4 import java.text.SimpleDateFormat;
      5 import java.util.ArrayList;
      6 import java.util.Calendar;
      7 import java.util.Date;
      8 import java.util.List;
      9 
     10 import org.apache.log4j.Logger;
     11 
     12 
     13 public class DateUtils {
     14     private static Logger log=Logger.getLogger(DateUtils.class);
     15     
     16     /**
     17      * 获取昨天日期
     18      * 
     19      * @param date
     20      * @return
     21      */
     22     public static String getYesterDay(Date date) {
     23 
     24         java.text.Format formatter = new java.text.SimpleDateFormat(
     25                 "yyyy-MM-dd");
     26 
     27         long beforeTime = (date.getTime() / 1000) - 24 * 60 * 60;
     28 
     29         date.setTime(beforeTime * 1000);
     30 
     31         return formatter.format(date);
     32 
     33     }
     34 
     35     /**
     36      * 获取昨天日期(返回数值)
     37      * 
     38      * @param date
     39      * @return num
     40      */
     41     public static Integer getYesterDayNum(Date date) {
     42 
     43         java.text.Format formatter = new java.text.SimpleDateFormat("yyyyMMdd");
     44 
     45         long beforeTime = (date.getTime() / 1000) - 24 * 60 * 60;
     46 
     47         date.setTime(beforeTime * 1000);
     48 
     49         return Integer.parseInt(formatter.format(date));
     50 
     51     }
     52 
     53     /**
     54      * 获取一周前的日期(当前日期往前推7天)
     55      * 
     56      * @param date
     57      * @return
     58      */
     59     public static String getWeekdayBeforeDate(Date date) {
     60 
     61         java.text.Format formatter = new java.text.SimpleDateFormat(
     62                 "yyyy-MM-dd");
     63 
     64         long beforeTime = (date.getTime() / 1000) - 24 * 60 * 60 * 7;
     65 
     66         date.setTime(beforeTime * 1000);
     67 
     68         return formatter.format(date);
     69 
     70     }
     71 
     72     /**
     73      * 获取一周前的日期(当前日期往前推7天)(返回数值)
     74      * 
     75      * @param date
     76      * @return
     77      */
     78     public static Integer getWeekdayBeforeDateNum(Date date) {
     79 
     80         java.text.Format formatter = new java.text.SimpleDateFormat("yyyyMMdd");
     81 
     82         long beforeTime = (date.getTime() / 1000) - 24 * 60 * 60 * 7;
     83 
     84         date.setTime(beforeTime * 1000);
     85 
     86         return Integer.parseInt(formatter.format(date));
     87 
     88     }
     89 
     90     /**
     91      * 获取一月前的日期(当前日期往前推30天)
     92      * 
     93      * @param date
     94      * @return
     95      */
     96     public static String getMonthBeforeDate(Date date) {
     97 
     98         java.text.Format formatter = new java.text.SimpleDateFormat(
     99                 "yyyy-MM-dd");
    100 
    101         long beforeTime = (date.getTime() / 1000) - 24 * 60 * 60 * 30;
    102 
    103         date.setTime(beforeTime * 1000);
    104 
    105         return formatter.format(date);
    106 
    107     }
    108 
    109     /**
    110      * 获取一月前的日期(当前日期往前推30天)(返回数值)
    111      * 
    112      * @param date
    113      * @return
    114      */
    115     public static Integer getMonthBeforeDateNum(Date date) {
    116 
    117         java.text.Format formatter = new java.text.SimpleDateFormat("yyyyMMdd");
    118 
    119         long beforeTime = (date.getTime() / 1000) - 24 * 60 * 60 * 30;
    120 
    121         date.setTime(beforeTime * 1000);
    122 
    123         return Integer.parseInt(formatter.format(date));
    124 
    125     }
    126 
    127     /**
    128      * 获取三月前的日期(当前日期往前推90天)
    129      * 
    130      * @param date
    131      * @return
    132      */
    133     public static String get3MonthBeforeDate(Date date) {
    134 
    135         java.text.Format formatter = new java.text.SimpleDateFormat(
    136                 "yyyy-MM-dd");
    137 
    138         long beforeTime = (date.getTime() / 1000) - 24 * 60 * 60 * 30 * 3;
    139 
    140         date.setTime(beforeTime * 1000);
    141 
    142         String d = formatter.format(date);
    143         return d;
    144     }
    145 
    146     /**
    147      * 获取三月前的日期(当前日期往前推30天)(返回数值)
    148      * 
    149      * @param date
    150      * @return
    151      */
    152     public static Integer get3MonthBeforeDateNum(Date date) {
    153 
    154         java.text.Format formatter = new java.text.SimpleDateFormat("yyyyMMdd");
    155 
    156         long beforeTime = (date.getTime() / 1000) - 24 * 60 * 60 * 30 * 3;
    157 
    158         date.setTime(beforeTime * 1000);
    159 
    160         return Integer.parseInt(formatter.format(date));
    161 
    162     }
    163 
    164     /**
    165      * 获取一年后的日期
    166      * 
    167      * @return
    168      */
    169     public static String getNextYear(int chooseYear, Date date) {
    170 
    171         java.text.Format formatter = new java.text.SimpleDateFormat(
    172                 "yyyy-MM-dd");
    173 
    174         long beforeTime = (date.getTime() / 1000) + 60 * 60 * 24 * 365
    175                 * chooseYear;
    176 
    177         date.setTime(beforeTime * 1000);
    178 
    179         return formatter.format(date);
    180     }
    181 
    182     /**
    183      * 日期转换成字符串
    184      * 
    185      * @param date
    186      * @return
    187      */
    188     public static String convertDateToStr(Date date) {
    189         java.text.Format formatter = new java.text.SimpleDateFormat(
    190                 "yyyy-MM-dd");
    191         return formatter.format(date);
    192 
    193     }
    194 
    195     /**
    196      * 日期转换成字符串 yyyy-MM-dd HHmmss
    197      * 
    198      * @param date
    199      * @return
    200      */
    201     public static String convertTimeToStr(Date date) {
    202         java.text.Format formatter = new java.text.SimpleDateFormat(
    203                 "yyyy-MM-dd HH:mm:ss");
    204         return formatter.format(date);
    205 
    206     }
    207 
    208     /**
    209      * 将日期转为数值
    210      * 
    211      * @param date
    212      * @return
    213      */
    214     public static Integer convertDateToNum(Date date) {
    215         java.text.Format formatter = new java.text.SimpleDateFormat("yyyyMMdd");
    216         return Integer.parseInt(formatter.format(date));
    217     }
    218     /**
    219      * 将字符串日期转为数值
    220      * 
    221      * @param date
    222      * @return
    223      */
    224     public static Integer convertStrToNum(String date) {
    225 
    226         if (date.contains("-")) {
    227             date = date.replace("-", "");
    228         } else if (date.contains(".")) {
    229             date = date.replace(".", "");
    230         } else if (date.contains("/")) {
    231             date = date.replace("/", "");
    232         }
    233 
    234         return Integer.parseInt(date);
    235     }
    236 
    237     /**
    238      * 时间转换器 第一个参数 要转化的数据类型 --- java.util.Date 第二个参数 要转化的数据 --- "2010-12-12"
    239      * 
    240      */
    241     public static Date convertStrTODate( String str,Class<Date> type,String datePattern) {
    242 
    243         if (str == null) {
    244             return null;
    245         } else {
    246             if (type == java.util.Date.class) {
    247                 if (str instanceof String) {
    248                     try {
    249                         SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
    250                         return sdf.parse(str);
    251                     } catch (ParseException e) {
    252                         throw new RuntimeException("您输入的数据格式不对");
    253                     }
    254                 } else {
    255                     throw new RuntimeException("您要转化的数据输入不是String类型");
    256                 }
    257             } else {
    258                 throw new RuntimeException("您要转化的数据类型不对");
    259             }
    260         }
    261     }
    262 
    263     /**
    264      * 根据生日计算年龄
    265      * 
    266      * @param birthDay
    267      * @return
    268      * @throws Exception
    269      */
    270     public static int getAge(Date birthDay) throws Exception {
    271         Calendar cal = Calendar.getInstance();
    272 
    273         if (cal.before(birthDay)) {
    274             throw new IllegalArgumentException(
    275                     "The birthDay is before Now.It's unbelievable!");
    276         }
    277         int yearNow = cal.get(Calendar.YEAR);
    278         int monthNow = cal.get(Calendar.MONTH);
    279         int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
    280         cal.setTime(birthDay);
    281 
    282         int yearBirth = cal.get(Calendar.YEAR);
    283         int monthBirth = cal.get(Calendar.MONTH);
    284         int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
    285 
    286         int age = yearNow - yearBirth;
    287 
    288         if (monthNow <= monthBirth) {
    289             if (monthNow == monthBirth) {
    290                 // monthNow==monthBirth
    291                 if (dayOfMonthNow < dayOfMonthBirth) {
    292                     age--;
    293                 } else {
    294                     // do nothing
    295                 }
    296             } else {
    297                 // monthNow>monthBirth
    298                 age--;
    299             }
    300         } else {
    301             // monthNow<monthBirth
    302             // donothing
    303         }
    304 
    305         return age;
    306     }
    307     ///////////////////////////////////////根据时间段获取时间的集合//////////////////////////////////////////////////////////////////
    308     public static List<String> getDateListBydates(String s1,String s2,String format) throws ParseException{
    309         List<String>list=new ArrayList<String>();
    310         //String s1 = "2012-02-01";        
    311         //String s2 = "2012-04-04";        
    312         SimpleDateFormat sdf = new SimpleDateFormat(format);         
    313         Date   begin=sdf.parse(s1);              
    314         Date   end=sdf.parse(s2);              
    315         double   between=(end.getTime()-begin.getTime())/1000;//除以1000是为了转换成秒              
    316         double  day=between/(24*3600);        
    317         for(int i = 0;i<=day;i++){                             
    318             Calendar cd = Calendar.getInstance();           
    319             cd.setTime(sdf.parse(s1));           
    320             cd.add(Calendar.DATE, i);//增加一天           
    321             //cd.add(Calendar.MONTH, n);//增加一个月  
    322             log.info(sdf.format(cd.getTime()));
    323             list.add(sdf.format(cd.getTime()));
    324         }
    325         return list;
    326     }
    327     //获取指定年月的总天数
    328     public static int getLastDay(int year, int month) {
    329         int day = 1;
    330         Calendar cal = Calendar.getInstance();
    331         cal.set(year,month - 1,day);
    332         int last = cal.getActualMaximum(Calendar.DATE);
    333         System.out.println(last);
    334         return last;
    335     }
    336     //获取指定年月的日期
    337     @SuppressWarnings("unchecked")
    338     public static List<String> getDatesByMonth(int year, int month){
    339         List<String> list=new ArrayList();
    340         String yyyy=year+"";
    341         String mm=month+"";
    342         String dd="01";
    343         if(month<10){
    344             mm="0"+month;
    345         }
    346         int num=getLastDay(year, month);
    347         for(int i=1;i<=num;i++){
    348             if(i<10){
    349                 dd="0"+i;
    350             }else{
    351                 dd=i+"";
    352             }
    353             list.add(yyyy+"-"+mm+"-"+dd);
    354             System.out.println(yyyy+"-"+mm+"-"+dd);
    355         }
    356         return list;
    357     }
    358     /**
    359      * 
    360      * @param datestr 解析字符串  如2014-04-1716:38:57
    361      * @param sourceDateformat 源日期格式 如yyyy-MM-ddHH:mm:ss
    362      * @param formatStr 要转换的日期格式 如(yyyy-MM-dd HH:mm:ss)
    363      * @return
    364      */
    365     public static String strTOdateTOStr(String datestr,String sourceDateformat,String targetDateformat){
    366 //        String str="2014-04-1716:38:57";
    367         try {
    368             SimpleDateFormat sourceFormat = new SimpleDateFormat(sourceDateformat);
    369             SimpleDateFormat targetFormat = new SimpleDateFormat(targetDateformat);
    370             return targetFormat.format(sourceFormat.parse(datestr));
    371         } catch (Exception e) {
    372             log.info("strTOdateTOStr:"+e);
    373         }
    374         return null;
    375         
    376     }
    377     /////////////////////////////////////////////////////////////////////////////////////////////////////////
    378 
    379     public static void main(String[] args) throws Exception{
    380         //getDatesByMonth(2013,2);
    381         getDateListBydates("20130517","20130519","yyyyMMdd");
    382         
    383     }
    384 
    385 }
  • 相关阅读:
    pat00-自测5. Shuffling Machine (20)
    Spiral Matrix
    Search in Rotated Sorted Array II
    Search in Rotated Sorted Array
    Best Time to Buy and Sell Stock II
    4Sum
    3Sum Closest
    3Sum
    MySQL存储过程、函数和游标
    Word Ladder
  • 原文地址:https://www.cnblogs.com/lixin890808/p/3904703.html
Copyright © 2011-2022 走看看