日期操作类

  1. package com.lcr.tools.util.date;  
  2.   
  3. import java.io.Serializable;  
  4. import java.text.ParseException;  
  5. import java.text.SimpleDateFormat;  
  6. import java.util.Calendar;  
  7. import java.util.Date;  
  8.   
  9. public class DateTimeUtil implements Serializable {  
  10.   
  11.     /**   
  12.     * serialVersionUID:TODO 
  13.     *   
  14.     * @author: lu chunli 
  15.     * @date:   2012-5-13 下午02:44:59 
  16.     * @version 1.0.0 
  17.     *    
  18.     */    
  19.       
  20.     private static final long serialVersionUID = 1L;  
  21.       
  22.       
  23.     private  static final SimpleDateFormat longDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  24.       
  25.     private  static final SimpleDateFormat shortDateFormat = new SimpleDateFormat("yyyy-MM-dd");  
  26.       
  27.     /** 
  28.      * 根据一个日期,返回是星期几的字符串 
  29.      */  
  30.     private static String getWeek (String strDate) {  
  31.         // 再转换为时间  
  32.         Date date = null;  
  33.         try {  
  34.             date = shortDateFormat.parse(strDate);  
  35.         } catch (ParseException e) {  
  36.             e.printStackTrace();  
  37.         }  
  38.         Calendar calendar = Calendar.getInstance();  
  39.         calendar.setTime(date);  
  40.           
  41.         return new SimpleDateFormat("EEEE").format(calendar.getTime());  
  42.     }  
  43.       
  44.     /** 
  45.      * 取当天(短日期类型) 
  46.      */  
  47.     private static String getShortToday () {  
  48.         Date today = new Date();  
  49.         return shortDateFormat.format(today);   
  50.     }  
  51.       
  52.     /** 
  53.      * 取当天(长日期类型) 
  54.      */  
  55.     private static String getLongToday () {  
  56.         Date today = new Date();  
  57.         return longDateFormat.format(today);   
  58.     }  
  59.       
  60.     /** 
  61.      * 取当天零点零分零秒 
  62.      */  
  63.     private static String getTodayStart () {  
  64.         Calendar calendar = Calendar.getInstance();  
  65.         //如果没有这种设定的话回去系统的当期的时间  
  66.         calendar.set(Calendar.HOUR_OF_DAY, 0);  
  67.         calendar.set(Calendar.MINUTE, 0);  
  68.         calendar.set(Calendar.SECOND, 0);  
  69.         calendar.set(Calendar.MILLISECOND, 0);  
  70.         Date date = new Date(calendar.getTimeInMillis());  
  71.         return longDateFormat.format(date);  
  72.     }     
  73.   
  74.     /** 
  75.      * 取当天23点59分59秒 
  76.      */  
  77.     private static String getTodayEnd () {  
  78.         Calendar calendar = Calendar.getInstance();  
  79.         calendar.set(Calendar.HOUR_OF_DAY, 23);   
  80.         calendar.set(Calendar.MINUTE, 59);  
  81.         calendar.set(Calendar.SECOND, 59);  
  82.         Date date = new Date(calendar.getTimeInMillis());  
  83.         return longDateFormat.format(date);  
  84.     }     
  85.   
  86.     /** 
  87.      * 取特定日期的零点零分零秒 
  88.      */  
  89.     private static String getDateStart (String strDate) {  
  90.         if (null == strDate || "".equals(strDate.trim())) {  
  91.             return "";  
  92.         }  
  93.         Date date = null;  
  94.         try {  
  95.             date = shortDateFormat.parse(strDate);  
  96.         } catch (ParseException e) {  
  97.             e.printStackTrace();  
  98.         }  
  99.         return longDateFormat.format(date);  
  100.     }  
  101.       
  102.     /** 
  103.      * 取特定日期的零点零分零秒 
  104.      */  
  105.     private static String getDateEnd (String strDate) {  
  106.         if (null == strDate || "".equals(strDate.trim())) {  
  107.             return "";  
  108.         }  
  109.         Date date = null;  
  110.         try {  
  111.             date = shortDateFormat.parse(strDate);  
  112.         } catch (ParseException e) {  
  113.             e.printStackTrace();  
  114.         }  
  115.   
  116.         //这样能够取到59分59秒  
  117.         Calendar calendar = Calendar.getInstance();  
  118.         calendar.setTime(date);  
  119.         calendar.set(Calendar.HOUR_OF_DAY, 23);  
  120.         calendar.set(Calendar.MINUTE, 59);  
  121.         calendar.set(Calendar.SECOND, 59);  
  122.         calendar.set(Calendar.MILLISECOND, 0);  
  123.           
  124.         return longDateFormat.format(calendar.getTime());  
  125.     }  
  126.   
  127.     /** 
  128.      * 取当周周一 
  129.      */  
  130.     private static String getMondayOfThisWeek () {  
  131.         Calendar calendar = Calendar.getInstance();  
  132.         int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1;  
  133.         if (day_of_week == 0){  
  134.             day_of_week = 7;  
  135.         }  
  136.         calendar.add(Calendar.DATE, -day_of_week + 1);  
  137.         /*calendar.set(Calendar.HOUR_OF_DAY, 0); 
  138.         calendar.set(Calendar.MINUTE, 0); 
  139.         calendar.set(Calendar.SECOND, 0); 
  140.         calendar.set(Calendar.MILLISECOND, 0);*/  
  141.         return shortDateFormat.format(calendar.getTime());  
  142.     }  
  143.       
  144.     /** 
  145.      * 取当周周日 
  146.      */  
  147.     private static String getSundayOfThisWeek () {  
  148.         Calendar calendar = Calendar.getInstance();  
  149.         int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1;  
  150.         if (day_of_week == 0){  
  151.             day_of_week = 7;  
  152.         }  
  153.         calendar.add(Calendar.DATE, -day_of_week + 1);  
  154.         /*calendar.set(Calendar.HOUR_OF_DAY, 0); 
  155.         calendar.set(Calendar.MINUTE, 0); 
  156.         calendar.set(Calendar.SECOND, 0); 
  157.         calendar.set(Calendar.MILLISECOND, 0);*/  
  158.         //以上取得的是周一  
  159.         calendar.add(Calendar.DATE, 6);  
  160.         return shortDateFormat.format(calendar.getTime());  
  161.     }  
  162.       
  163.     /** 
  164.      * 取上周周一 
  165.      */  
  166.     private static String getMondayOfPreviousWeek () {  
  167.         Calendar calendar = Calendar.getInstance();  
  168.         int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1;  
  169.         if (day_of_week == 0){  
  170.             day_of_week = 7;  
  171.         }  
  172.         calendar.add(Calendar.DATE, -day_of_week + 1);  
  173.         calendar.add(Calendar.DATE, -7);  
  174.         return shortDateFormat.format(calendar.getTime());  
  175.     }  
  176.       
  177.     /** 
  178.      * 取上周周日 
  179.      */  
  180.     private static String getSundayOfPreviousWeek () {  
  181.         Calendar calendar = Calendar.getInstance();  
  182.         int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1;  
  183.         if (day_of_week == 0){  
  184.             day_of_week = 7;  
  185.         }  
  186.         calendar.add(Calendar.DATE, -day_of_week + 1);  
  187.         calendar.add(Calendar.DATE, -1);  
  188.         return shortDateFormat.format(calendar.getTime());  
  189.     }  
  190.       
  191.     /** 
  192.      * 取下周周一 
  193.      */  
  194.     private static String getMondayOfNextWeek () {  
  195.         Calendar calendar = Calendar.getInstance();  
  196.         int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1;  
  197.         if (day_of_week == 0){  
  198.             day_of_week = 7;  
  199.         }  
  200.         calendar.add(Calendar.DATE, -day_of_week + 1);  // 当周周一  
  201.         calendar.add(Calendar.DATE, 7);  
  202.         return shortDateFormat.format(calendar.getTime());  
  203.     }  
  204.       
  205.     /** 
  206.      * 取下周周日 
  207.      */  
  208.     private static String getSundayOfNextWeek () {  
  209.         Calendar calendar = Calendar.getInstance();  
  210.         int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1;  
  211.         if (day_of_week == 0){  
  212.             day_of_week = 7;  
  213.         }  
  214.         calendar.add(Calendar.DATE, -day_of_week + 1);  // 当周周一  
  215.         calendar.add(Calendar.DATE, 13);  
  216.         return shortDateFormat.format(calendar.getTime());  
  217.     }  
  218.       
  219.     /** 
  220.      * 取当月1号 
  221.      */  
  222.     private static String getFirstDayOfThisMonth () {  
  223.          Calendar calendar = Calendar.getInstance();    
  224.          calendar.set(Calendar.DATE, 1);    // 设为当前月的1号    
  225.          return shortDateFormat.format(calendar.getTime());  
  226.     }  
  227.       
  228.     /** 
  229.      * 取当月最后一天 
  230.      */  
  231.     private static String getLastDayOfThisMonth () {  
  232.          Calendar calendar = Calendar.getInstance();    
  233.          calendar.set(Calendar.DATE, 1);    // 设为当前月的1号    
  234.          calendar.add(Calendar.MONTH, 1);   // 加一个月,变为下月的1号  
  235.          calendar.add(Calendar.DATE, -1);   // 减去一天,变为当月最后一天  
  236.          return shortDateFormat.format(calendar.getTime());  
  237.     }  
  238.       
  239.     /** 
  240.      * 取上月1号 
  241.      */  
  242.     private static String getFirstDayOfPreviousMonth () {  
  243.          Calendar calendar = Calendar.getInstance();    
  244.          calendar.set(Calendar.DATE, 1);    // 设为当前月的1号    
  245.          calendar.add(Calendar.MONTH, -1);  // 减一个月,变为上月的1号  
  246.          return shortDateFormat.format(calendar.getTime());  
  247.     }  
  248.       
  249.     /** 
  250.      * 取上月最后一天 
  251.      */  
  252.     private static String getLastDayOfPreviousMonth () {  
  253.          Calendar calendar = Calendar.getInstance();    
  254.          calendar.set(Calendar.DATE, 1);    // 设为当前月的1号    
  255.          calendar.add(Calendar.DATE, -1);   // 减去一天,变为上月最后一天  
  256.          return shortDateFormat.format(calendar.getTime());  
  257.     }  
  258.       
  259.     /** 
  260.      * 取下月1号 
  261.      */  
  262.     private static String getFirstDayOfNextMonth () {  
  263.         Calendar calendar = Calendar.getInstance();  
  264.         calendar.add(Calendar.MONTH, 1);    // 加一个月  
  265.         calendar.set(Calendar.DATE, 1);     // 把日期设置为当月第一天  
  266.         return shortDateFormat.format(calendar.getTime());  
  267.     }  
  268.       
  269.     /** 
  270.      * 取下月最后一天 
  271.      */  
  272.     private static String getLastDayOfNextMonth () {  
  273.         Calendar calendar = Calendar.getInstance();  
  274.         calendar.add(Calendar.MONTH, 1);// 加一个月  
  275.         calendar.set(Calendar.DATE, 1);// 把日期设置为当月第一天  
  276.         calendar.roll(Calendar.DATE, -1);// 日期回滚一天,也就是本月最后一天  
  277.         return shortDateFormat.format(calendar.getTime());  
  278.     }  
  279.       
  280.     /** 
  281.      * 获得本年有多少天 
  282.      */  
  283.     private static int getTotalDaysOfThisYear() {  
  284.         Calendar calendar = Calendar.getInstance();  
  285.         calendar.set(Calendar.DAY_OF_YEAR, 1);// 把日期设为当年第一天  
  286.         calendar.roll(Calendar.DAY_OF_YEAR, -1);// 把日期回滚一天。  
  287.         int totalDays = calendar.get(Calendar.DAY_OF_YEAR);  
  288.         return totalDays;  
  289.     }  
  290.       
  291.     /** 
  292.      * 获取某年某月的最后一天 
  293.      */  
  294.     private static int getLastDayOfMonth (int year, int month) {  
  295.         if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {  
  296.             return 31;  
  297.         }  
  298.         if (month == 4 || month == 6 || month == 9 || month == 11) {  
  299.             return 30;  
  300.         }  
  301.         if (month == 2) {  
  302.             if (isLeapYear(year)) {  
  303.                 return 29;  
  304.             } else {  
  305.                 return 28;  
  306.             }  
  307.         }  
  308.         return 0;  
  309.     }  
  310.   
  311.     /** 
  312.      * 是否闰年 
  313.      */  
  314.     public static boolean isLeapYear (int year) {  
  315.         return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);  
  316.     }  
  317.       
  318.   
  319.     /** 
  320.      * 获得本年第一天的日期 
  321.      */  
  322.     public static String getFirstDayOfThisYear () {  
  323.         Calendar calendar = Calendar.getInstance();  
  324.         calendar.set(Calendar.MONTH, 1);  
  325.         calendar.set(Calendar.DAY_OF_YEAR, 1);  
  326.         Date date = new Date(calendar.getTimeInMillis());  
  327.         return shortDateFormat.format(date);  
  328.     }  
  329.   
  330.     /** 
  331.      *  获得本年最后一天的日期 
  332.      */  
  333.     public static String getLastDayOfThisYear () {  
  334.         Date date = new Date();  
  335.         String years = new SimpleDateFormat("yyyy").format(date);  
  336.         return years + "-12-31";  
  337.     }  
  338.       
  339.     /** 
  340.      *  获得上年第一天的日期 * 
  341.      */  
  342.     public static String getFirstDayOfPreviousYear () {  
  343.         Calendar calendar = Calendar.getInstance();  
  344.         calendar.add(Calendar.YEAR, -1);    // 若是 明年改为正整数1即可  
  345.         calendar.set(Calendar.MONTH, 1);  
  346.         calendar.set(Calendar.DAY_OF_YEAR, 1);  
  347.         Date date = new Date(calendar.getTimeInMillis());  
  348.         return shortDateFormat.format(date);  
  349.     }  
  350.       
  351.     /** 
  352.      * 两个时间之间的天数 
  353.      */  
  354.     public static long getDays (String date1, String date2) {  
  355.         if (date1 == null || "".equals(date1.trim())) {  
  356.             return 0;  
  357.         }  
  358.         if (date2 == null || "".equals(date2.trim())) {  
  359.             return 0;  
  360.         }  
  361.         // 转换为标准时间  
  362.         Date date = null;  
  363.         Date mydate = null;  
  364.         try {  
  365.             date = shortDateFormat.parse(date1);  
  366.             mydate = shortDateFormat.parse(date2);  
  367.         } catch (Exception e) {  
  368.             e.printStackTrace();  
  369.         }  
  370.         long day = 0;  
  371.         if (date.before(mydate)) {  
  372.             day = (mydate.getTime() - date.getTime()) / (24 * 60 * 60 * 1000);  
  373.         } else {  
  374.             day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);  
  375.         }  
  376.         return day;  
  377.     }  
  378.       
  379.     /** 
  380.      *  
  381.      */  
  382.     public static void main(String[] args) {  
  383.         System.out.println("/*--------------------------两个时间之间的天数--------------------------*/");  
  384.         System.out.println("两个时间之间的天数1  :   " + getDays ("2012-05-10""2012-05-15"));  
  385.         System.out.println("两个时间之间的天数2  :   " + getDays ("2012-06-10""2012-05-15"));  
  386.         System.out.println("/*--------------------------获得上年第一天的日期--------------------------*/");  
  387.         System.out.println("获得上年第一天的日期  :   " + getFirstDayOfPreviousYear ());  
  388.         System.out.println("/*--------------------------获得本年最后一天的日期--------------------------*/");  
  389.         System.out.println("获得本年最后一天的日期 :   " + getLastDayOfThisYear ());  
  390.         System.out.println("/*--------------------------获得本年第一天的日期--------------------------*/");  
  391.         System.out.println("获得本年第一天的日期  :   " + getFirstDayOfThisYear ());  
  392.         System.out.println("/*--------------------------获取某年某月的最后一天--------------------------*/");  
  393.         System.out.println("获取某年某月的最后一天 :   " + getLastDayOfMonth (20125));  
  394.         System.out.println("/*--------------------------------是否闰年---------------------------------*/");  
  395.         System.out.println("是否闰年                :   " + isLeapYear(2012));  
  396.         System.out.println("/*--------------------------获得本年有多少天--------------------------*/");  
  397.         System.out.println("获得本年有多少天        :   " + getTotalDaysOfThisYear());  
  398.         System.out.println("/*--------------------------下月1号和最后一天--------------------------*/");  
  399.         System.out.println("下月1号                :   " + getFirstDayOfNextMonth());  
  400.         System.out.println("下月最后一天          :   " + getLastDayOfNextMonth ());  
  401.         System.out.println("/*--------------------------上月1号和最后一天--------------------------*/");  
  402.         System.out.println("上月1号                :   " + getFirstDayOfPreviousMonth());  
  403.         System.out.println("上月最后一天          :   " + getLastDayOfPreviousMonth ());  
  404.         System.out.println("/*--------------------------当月1号和最后一天--------------------------*/");  
  405.         System.out.println("当月1号                :   " + getFirstDayOfThisMonth());  
  406.         System.out.println("当月最后一天          :   " + getLastDayOfThisMonth ());  
  407.         System.out.println("/*--------------------------当月1号和最后一天--------------------------*/");  
  408.         System.out.println("当月1号                :   " + getFirstDayOfThisMonth());  
  409.         System.out.println("当月最后一天          :   " + getLastDayOfThisMonth ());  
  410.         System.out.println("/*--------------------------下周周一和周日--------------------------*/");  
  411.         System.out.println("下周周一                :   " + getMondayOfNextWeek());  
  412.         System.out.println("下周周日                :   " + getSundayOfNextWeek ());  
  413.         System.out.println("/*--------------------------上周周一和周日--------------------------*/");  
  414.         System.out.println("上周周一                :   " + getMondayOfPreviousWeek());  
  415.         System.out.println("上周周日                :   " + getSundayOfPreviousWeek ());  
  416.         System.out.println("/*--------------------------当周周一和周日--------------------------*/");  
  417.         System.out.println("当周周一                :   " + getMondayOfThisWeek ());  
  418.         System.out.println("当周周日                :   " + getSundayOfThisWeek ());  
  419.         System.out.println("/*--------------------------特定日期(零点和23点)--------------------------*/");  
  420.         System.out.println("特定日期(23点59分59秒) :   " + getDateEnd ("2012-05-12"));  
  421.         System.out.println("特定日期(零点零分零秒)    :   " + getDateStart ("2012-05-12"));  
  422.         System.out.println("/*--------------------------当天(零点和23点)--------------------------*/");  
  423.         System.out.println("当天(23点59分59秒)   :   " + getTodayEnd ());  
  424.         System.out.println("当天(零点零分零秒)  :   " + getTodayStart ());  
  425.         System.out.println("/*---------------------------当天(长日期格式和短日期格式)-------------------------*/");  
  426.         System.out.println("当天(长日期格式)       :   " + getLongToday ());  
  427.         System.out.println("当天(短日期格式)       :   " + getShortToday ());  
  428.         System.out.println("/*---------------------------当天(长日期格式和短日期格式)-------------------------*/");  
  429.         System.out.println("根据一个日期,返回是星期几的字符串       :   " + getWeek ("2012-05-12"));  
  430.     }  
  431. }  

你可能感兴趣的:(日期操作类)