java 日期转换和相关的计算

    1. package com.gm.utils;  
    2.   
    3. import java.sql.Timestamp;  
    4. import java.text.ParseException;  
    5. import java.text.SimpleDateFormat;  
    6. import java.util.Calendar;  
    7. import java.util.Date;  
    8. /** 
    9.  * <p> 
    10.  * Title: 开发工具 
    11.  * </p> 
    12.  * <p> 
    13.  * Description: 时间工具类 
    14.  * </p> 
    15.  * <p> 
    16.  * Copyright: Copyright (c) 2007 
    17.  * </p> 
    18.  * <p> 
    19.  * Company: 
    20.  * </p> 
    21.  *  
    22.  * @version 1.0 
    23.  */  
    24. public class DateUtil {  
    25.     public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss SSS";  
    26.     public static final String DEFAULT_DATE_FORMAT2 = "yyyy-MM-dd HH:mm:ss";  
    27.     public static final String DATETIME_FORMAT = "yyyyMMddHHmmssSSS";  
    28.     public static final String DATE_FORMAT = "yyyy-MM-dd";  
    29.   
    30.     public static final String DATE_TYPE_DAY = "DAY";  
    31.     public static final String DATE_TYPE_MONTH = "MONTH";  
    32.     public static final String DATE_TYPE_YEAR = "YEAR";  
    33.     public static final String DATE_TYPE_WEEK = "WEEK";  
    34.     public static final String DATE_TYPE_HOUR = "HOUR";  
    35.     public static final String DATE_TYPE_MINUTE = "MINUTE";  
    36.     public static final String DATE_TYPE_SECOND = "SECOND";  
    37.     public static final SimpleDateFormat SIMPLEDATEFORMAT = new SimpleDateFormat(  
    38.             DEFAULT_DATE_FORMAT2);  
    39.   
    40.     public DateUtil() {  
    41.     }  
    42.   
    43.     /** 
    44.      * 将Date转换为字符串 
    45.      *  
    46.      * @param date 
    47.      *            Date 要转换的日期 
    48.      * @param dateFormatStr 
    49.      *            String 要转换的日期类型 
    50.      * @return String 返加String类型的日期 
    51.      */  
    52.     public static String DateToString(Date date, String dateFormatStr) {  
    53.         if (dateFormatStr == null || "".equals(dateFormatStr)) {  
    54.             dateFormatStr = DEFAULT_DATE_FORMAT;  
    55.         }  
    56.         SimpleDateFormat simpleDteFormat = new SimpleDateFormat(dateFormatStr);  
    57.         return simpleDteFormat.format(date);  
    58.     }  
    59.   
    60.     public static String DateToString(Date date) {  
    61.         return DateToString(date, DEFAULT_DATE_FORMAT2);  
    62.     }  
    63.   
    64.     /** 
    65.      * 跟参数参数day 返回 day 那天00:00:00 时候的时间戳long 
    66.      *  
    67.      * @return 
    68.      */  
    69.     public static Long dayToTimestampStart(Date day) {  
    70.         String dayStr = DateUtil.DateToString(day, DateUtil.DATE_FORMAT);  
    71.         Timestamp start = DateUtil.cString2Timestamp(dayStr + " 00:00:00",  
    72.                 DateUtil.DEFAULT_DATE_FORMAT2);  
    73.         return start.getTime();  
    74.     }  
    75.   
    76.     /** 
    77.      * 跟参数参数day 返回 day 那天23:59:59 时候的时间戳long 
    78.      *  
    79.      * @return 
    80.      */  
    81.     public static Long dayToTimestampEnd(Date day) {  
    82.         String dayStr = DateUtil.DateToString(day, DateUtil.DATE_FORMAT);  
    83.         Timestamp start = DateUtil.cString2Timestamp(dayStr + " 23:59:59",  
    84.                 DateUtil.DEFAULT_DATE_FORMAT2);  
    85.         return start.getTime();  
    86.     }  
    87.   
    88.   
    89.     /** 
    90.      * 跟参数参数day 返回 day 那天相隔多少秒的的时间戳时候的时间戳long 
    91.      * Date day 这个时间是带小时 分钟 秒的 用于5分钟 
    92.      * @return 
    93.      */  
    94.     public static Long dayTimeToTimestampStart(Date day,int temp) {  
    95.         String dayStr = DateUtil.DateToString(day, DateUtil.DEFAULT_DATE_FORMAT2);  
    96.   
    97.         String day_str = dayStr.substring(0,15);  
    98.         String day_str_start = day_str+"0:00";  
    99.         Timestamp start = DateUtil.cString2Timestamp(day_str_start,  
    100.                 DateUtil.DEFAULT_DATE_FORMAT2);  
    101.         long start_time = start.getTime() - temp;//  
    102.         return start_time;  
    103.     }  
    104.       
    105.       
    106.     /** 
    107.      * 跟参数参数day 返回 day 那天相隔多少秒的的时间戳时候的时间戳long 
    108.      * Date day 这个时间是带小时 分钟 秒的 
    109.      * @return 
    110.      */  
    111.     public static Long dayTimeToTimestampEnd(Date day,int temp) {  
    112.         String dayStr = DateUtil.DateToString(day, DateUtil.DEFAULT_DATE_FORMAT2);  
    113.         //if()  
    114.         String day_str = dayStr.substring(0,15);  
    115.         String day_str_end = day_str+"0:00";  
    116.         Timestamp start = DateUtil.cString2Timestamp(day_str_end,  
    117.                 DateUtil.DEFAULT_DATE_FORMAT2);  
    118.         long end_time = start.getTime() + temp;//  
    119.         return end_time;  
    120.     }  
    121.       
    122.     /** 
    123.      * 跟参数参数day 返回 day 那天相隔多少秒的的时间戳时候的时间戳long 
    124.      * Date day 这个时间是带小时 分钟 秒的 用于1小时 
    125.      * @return 
    126.      */  
    127.     public static Long dayTimeToTimestampStartOneHour(Date day,int temp) {  
    128.         String dayStr = DateUtil.DateToString(day, DateUtil.DEFAULT_DATE_FORMAT2);  
    129.   
    130.         String day_str = dayStr.substring(0,14);  
    131.         String day_str_start = day_str+"00:00";  
    132.         Timestamp start = DateUtil.cString2Timestamp(day_str_start,  
    133.                 DateUtil.DEFAULT_DATE_FORMAT2);  
    134.         long start_time = start.getTime() - temp;//  
    135.         return start_time;  
    136.     }  
    137.     /** 
    138.      * 将string转换成指定类型的Timestamp 
    139.      *  
    140.      * @param str 
    141.      *            String 被转换的String类型的日期 
    142.      * @param type 
    143.      *            String 日期格式 
    144.      * @return Long 返加long类型的日期 如:1368979200 
    145.      */  
    146.     public static Long cString2Timestamp2(String str, String type) {  
    147.         if (type == null || type.equals("")) {  
    148.             type = DEFAULT_DATE_FORMAT2;  
    149.         }  
    150.         if (str.length() <= 10) {  
    151.             str = str + " 00:00:00";  
    152.         }  
    153.         SimpleDateFormat df = new java.text.SimpleDateFormat(type);  
    154.         try {  
    155.             return new Timestamp(df.parse(str).getTime() / 1000).getTime();  
    156.         } catch (ParseException e) {  
    157.             e.printStackTrace();  
    158.             return null;  
    159.         }  
    160.     }  
    161.   
    162.     /** 
    163.      * 返回当前日期时间的字符串 
    164.      *  
    165.      * @param dateFormatStr 
    166.      *            String 要转换的日期类型 
    167.      * @return String 返加String类型的日期 
    168.      */  
    169.     public static String getCurrentDateTime(String dateFormatStr) {  
    170.         if (dateFormatStr == null || "".equals(dateFormatStr)) {  
    171.             dateFormatStr = DEFAULT_DATE_FORMAT2;  
    172.         }  
    173.         Date date = new Date();  
    174.         SimpleDateFormat simpleDteFormat = new SimpleDateFormat(dateFormatStr);  
    175.         return simpleDteFormat.format(date);  
    176.     }  
    177.   
    178.     /** 
    179.      * 返回当前日期的字符串 
    180.      *  
    181.      * @param dateFormatStr 
    182.      *            String 日期格式 
    183.      * @return String 返回当前日期的字符串 
    184.      */  
    185.     public static String getCurrentDate(String dateFormatStr) {  
    186.         if (dateFormatStr == null || "".equals(dateFormatStr)) {  
    187.             dateFormatStr = DATE_FORMAT;  
    188.         }  
    189.         Date date = new Date();  
    190.         SimpleDateFormat simpleDteFormat = new SimpleDateFormat(dateFormatStr);  
    191.         return simpleDteFormat.format(date);  
    192.     }  
    193.   
    194.     /** 
    195.      * 将字符串转换为Date 
    196.      *  
    197.      * @param strDate 
    198.      *            String 被转换的String类型的日期 
    199.      * @param strDateFormat 
    200.      *            String Date格式 
    201.      * @return Date 返加Date类型的日期 
    202.      */  
    203.     public static Date StringTodate(String strDate, String strDateFormat) {  
    204.         if (strDate == null || "".equals(strDateFormat)  
    205.                 || strDateFormat == null) {  
    206.             strDateFormat = DEFAULT_DATE_FORMAT2;  
    207.         }  
    208.         Date rDate;  
    209.         SimpleDateFormat format = new SimpleDateFormat(strDateFormat);  
    210.         try {  
    211.             rDate = format.parse(strDate);  
    212.         } catch (Exception e) {  
    213.             e.printStackTrace();  
    214.             return null;  
    215.         }  
    216.         return rDate;  
    217.     }  
    218.   
    219.     /** 
    220.      * 将string转换成指定类型的Timestamp 
    221.      *  
    222.      * @param str 
    223.      *            String 被转换的String类型的日期 
    224.      * @param type 
    225.      *            String 日期格式 
    226.      * @return Timestamp 返加Timestamp类型的日期 
    227.      */  
    228.     public static Timestamp cString2Timestamp(String str, String type) {  
    229.         if (type == null || type.equals("")) {  
    230.             type = DEFAULT_DATE_FORMAT2;  
    231.         }  
    232.         if (str.length() <= 10) {  
    233.             str = str + " 00:00:00";  
    234.         }  
    235.         SimpleDateFormat df = new java.text.SimpleDateFormat(type);  
    236.         try {  
    237.             return new Timestamp(df.parse(str).getTime() / 1000);  
    238.         } catch (ParseException e) {  
    239.             e.printStackTrace();  
    240.             return null;  
    241.         }  
    242.     }  
    243.   
    244.     public static Timestamp getTimeStamp() {  
    245.         return cString2Timestamp(getCurrentDateTime(null), null);  
    246.     }  
    247.   
    248.     /** 
    249.      * 将Timestamp转换成指定类型的string 
    250.      *  
    251.      * @param ts 
    252.      *            Timestamp 被转换的Timestamp类型的日期 
    253.      * @param type 
    254.      *            String 日期格式 
    255.      * @return String 返加String类型的日期 
    256.      */  
    257.     public static String cTimestamp2String(Timestamp ts, String type) {  
    258.         SimpleDateFormat df = new java.text.SimpleDateFormat(type);  
    259.         return df.format(new java.util.Date(ts.getTime()));  
    260.     }  
    261.   
    262.     /** 
    263.      * 将long型的Timestamp值转换成指定类型的string 例如将1362120197734数值转换为制定类型的String日期 
    264.      *  
    265.      * @param ts 
    266.      *            Timestamp 被转换的Timestamp类型的日期 
    267.      * @param type 
    268.      *            String 日期格式 
    269.      * @return String 返加String类型的日期 
    270.      */  
    271.     public static String cTimestampLong2String(long ts, String type) {  
    272.         SimpleDateFormat df = new java.text.SimpleDateFormat(type);  
    273.         return df.format(new java.util.Date(ts * 1000));  
    274.     }  
    275.   
    276.     /** 
    277.      * 将字符串型的Timestamp值转换成指定类型的string 例如将"1362120197734" 字符创转换为制定类型的String日期 
    278.      *  
    279.      * @param ts 
    280.      *            Timestamp 被转换的Timestamp类型的日期 
    281.      * @param type 
    282.      *            String 日期格式 
    283.      * @return String 返加String类型的日期 
    284.      */  
    285.     public static String cTimestampStr2String(String ts, String type) {  
    286.         Double tmp = new Double(ts);  
    287.         tmp = Math.floor(tmp);  
    288.         return cTimestampLong2String(tmp.longValue(), type);  
    289.     }  
    290.   
    291.     /** 
    292.      * 将字符串型的Timestamp值转换成Date 例如将"1362120197734" 字符创转换为日期 
    293.      *  
    294.      * @param ts 
    295.      *            Timestamp 被转换的Timestamp类型的日期 
    296.      * @return date 
    297.      */  
    298.     public static Date cTimestampStr2Date(String ts) {  
    299.         Double tmp = new Double(ts);  
    300.         tmp = Math.floor(tmp);  
    301.         // long tem=Long.parseLong(ts);  
    302.         return StringTodate(  
    303.                 cTimestampLong2String(tmp.longValue(), DATE_FORMAT),  
    304.                 DATE_FORMAT);  
    305.     }  
    306.   
    307.     /** 
    308.      * 将Timestamp转换成date 
    309.      *  
    310.      * @param ts 
    311.      *            Timestamp 被转换的Timestamp类型的日期 
    312.      * @return Date 返加Date类型的日期 
    313.      */  
    314.     public static Date cTimestamp2Date(Timestamp ts) {  
    315.         String strDate = cTimestamp2String(ts, DEFAULT_DATE_FORMAT2);  
    316.         return StringTodate(strDate, DEFAULT_DATE_FORMAT2);  
    317.     }  
    318.   
    319.     /** 
    320.      * 日期相加函数 
    321.      *  
    322.      * @param sorDate 
    323.      *            String 被加的日期,必须为String类型 
    324.      * @param value 
    325.      *            int 天数,可为负数 
    326.      * @param dateType 
    327.      *            String 日期格式 
    328.      * @return String 相加后的日期,必须为String类型 
    329.      */  
    330.     public static String dateAdd(String sorDate, int value, String dateType) {  
    331.         if (dateType == null || value == 0 || sorDate == null) {  
    332.             return sorDate;  
    333.         }  
    334.         Date date = DateUtil.StringTodate(sorDate, DATE_FORMAT);  
    335.         Date getDate = DateUtil.dateAdd(date, value, dateType);  
    336.         return DateUtil.DateToString(getDate, DATE_FORMAT);  
    337.     }  
    338.   
    339.     /** 
    340.      * 日期相加函数 
    341.      *  
    342.      * @param sorDate 
    343.      *            Date 被加的日期,必须为Date类型 
    344.      * @param value 
    345.      *            int 天数,可为负数 
    346.      * @param dateType 
    347.      *            String 日期格式 
    348.      * @return Date 相加后的日期 
    349.      */  
    350.     public static Date dateAdd(Date sorDate, int value, String dateType) {  
    351.         if (dateType == null || value == 0 || sorDate == null) {  
    352.             return sorDate;  
    353.         }  
    354.         Calendar calendar = Calendar.getInstance();  
    355.         calendar.setTime(sorDate);  
    356.         if (dateType.equalsIgnoreCase(DATE_TYPE_SECOND)) {  
    357.             calendar.add(Calendar.SECOND, value);  
    358.         } else if (dateType.equalsIgnoreCase(DATE_TYPE_MINUTE)) {  
    359.             calendar.add(Calendar.MINUTE, value);  
    360.         } else if (dateType.equalsIgnoreCase(DATE_TYPE_HOUR)) {  
    361.             calendar.add(Calendar.HOUR, value);  
    362.         } else if (dateType.equalsIgnoreCase(DATE_TYPE_WEEK)) {  
    363.             calendar.add(Calendar.WEDNESDAY, value);  
    364.         } else if (dateType.equalsIgnoreCase(DATE_TYPE_DAY)) {  
    365.             calendar.add(Calendar.DATE, value);  
    366.         } else if (dateType.equalsIgnoreCase(DATE_TYPE_MONTH)) {  
    367.             calendar.add(Calendar.MONTH, value);  
    368.         } else if (dateType.equalsIgnoreCase(DATE_TYPE_YEAR)) {  
    369.             calendar.add(Calendar.YEAR, value);  
    370.         }  
    371.         return calendar.getTime();  
    372.     }  
    373.   
    374.     public static long getTimemillon(String start, String end) {  
    375.         try {  
    376.             Date startDate = SIMPLEDATEFORMAT.parse(start);  
    377.             Date endDate = SIMPLEDATEFORMAT.parse(end);  
    378.             return getTimemillon(startDate, endDate);  
    379.         } catch (ParseException e) {  
    380.             System.err.println("字符串: " + start + " or  " + end + " 转换日期错误");  
    381.             return 0;  
    382.         }  
    383.     }  
    384.   
    385.     public static long getTimemillon(Date startDate, Date endDate) {  
    386.         return endDate.getTime() - startDate.getTime();  
    387.     }  
    388.   
    389.     public static String getNowDateTimeStr() {  
    390.         return DateToString(new Date());  
    391.     }  
    392.   
    393.     public static String getNowDateString() {  
    394.         return DateToString(new Date(), DATE_FORMAT);  
    395.     }  
    396.   
    397.     /** 
    398.      * 获得当前时间的前一天,就是昨天的这个时刻 
    399.      *  
    400.      * @return 
    401.      */  
    402.     public static Date getYesterday() {  
    403.         Date date = new Date();  
    404.         return dateAdd(date, -1, DATE_TYPE_DAY);  
    405.   
    406.     }  
    407.   
    408.     // 得到个时间段的差值  
    409.     public static Long betWeenDate(String startDate, String endDate) {  
    410.         long zero = 0;  
    411.         Date start = DateUtil.StringTodate(startDate, DateUtil.DATE_FORMAT);  
    412.         Date end = DateUtil.StringTodate(endDate, DateUtil.DATE_FORMAT);  
    413.         long d1 = start.getTime();  
    414.         long d2 = end.getTime();  
    415.   
    416.         if (d2 - d1 == 0) {  
    417.             return zero;  
    418.         }  
    419.         long date = (d2 - d1) / (24 * 60 * 62 * 1000) + 1;  
    420.         return date;  
    421.     }  
    422.   
    423.     /** 
    424.      * 判断两天是否为同一天 
    425.      *  
    426.      * @param startDate 
    427.      * @param endDate 
    428.      * @return 
    429.      */  
    430.     public static boolean isSameDay(String startDate, String endDate) {  
    431.         boolean flag = false;  
    432.         Date start = DateUtil.StringTodate(startDate, DateUtil.DATE_FORMAT);  
    433.         Date end = DateUtil.StringTodate(endDate, DateUtil.DATE_FORMAT);  
    434.         Calendar calendar1 = Calendar.getInstance();  
    435.         calendar1.setTimeInMillis(start.getTime());  
    436.         Calendar calendar2 = Calendar.getInstance();  
    437.         calendar2.setTimeInMillis(end.getTime());  
    438.         if (calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR)  
    439.                 && calendar1.get(Calendar.MONTH) == calendar2  
    440.                         .get(Calendar.MONTH)  
    441.                 && calendar1.get(Calendar.DATE) == calendar2.get(Calendar.DATE)) {  
    442.             flag = true;  
    443.         }  
    444.         return flag;  
    445.     }  
    446.   
    447.     /** 
    448.      * 返回当前时间所属5分钟范围的开始时间。 
    449.      *  
    450.      * @param date 
    451.      * @return 
    452.      */  
    453.     public static String getStart5TimeStr(Date date) {  
    454.         String dayStr = DateUtil.DateToString(date, DateUtil.DATE_FORMAT);  
    455.         Calendar calendar1 = Calendar.getInstance();  
    456.         calendar1.setTime(date);  
    457.         int hour = calendar1.get(Calendar.HOUR_OF_DAY);  
    458.         String hour_str = "";  
    459.         int minute = calendar1.get(Calendar.MINUTE);  
    460.         String minute_str = "";  
    461.         if (hour < 10) {  
    462.             hour_str = "0" + hour;  
    463.         } else {  
    464.             hour_str = "" + hour;  
    465.         }  
    466.         if (minute >= 10) {  
    467.             minute_str = (minute + "").substring(01);  
    468.             minute = Integer.parseInt((minute + "").substring(12));  
    469.             if (minute >= 5) {  
    470.                 minute_str = minute_str + "0";  
    471.                 /* 
    472.                  * }else if(minute == 0){ minute_str = 
    473.                  * (Integer.parseInt(minute_str)-1)+"0"; 
    474.                  */  
    475.             } else {  
    476.                 minute_str = (Integer.parseInt(minute_str) - 1) + "" + 5;  
    477.             }  
    478.             return dayStr + " " + hour_str + ":" + minute_str + ":" + "00";  
    479.         } else {  
    480.             if (minute >= 5) {  
    481.                 calendar1.set(Calendar.MINUTE, 0);  
    482.             } else if (minute == 0) {  
    483.                 calendar1.set(Calendar.HOUR_OF_DAY, hour - 1);  
    484.                 calendar1.set(Calendar.MINUTE, 55);  
    485.             } else {  
    486.                 calendar1.set(Calendar.HOUR_OF_DAY, hour - 1);  
    487.                 calendar1.set(Calendar.MINUTE, 55);  
    488.             }  
    489.             calendar1.set(Calendar.SECOND, 0);  
    490.             return DateUtil.DateToString(calendar1.getTime(),  
    491.                     DateUtil.DEFAULT_DATE_FORMAT2);  
    492.         }  
    493.   
    494.     }  
    495.   
    496.     /** 
    497.      * 返回当前时间所属5分钟范围的结束时间。 
    498.      *  
    499.      * @param date 
    500.      * @return 
    501.      */  
    502.     public static String getEnd5TimeStr(Date date) {  
    503.         String dayStr = DateUtil.DateToString(date, DateUtil.DATE_FORMAT);  
    504.         Calendar calendar1 = Calendar.getInstance();  
    505.         calendar1.setTime(date);  
    506.         int hour = calendar1.get(Calendar.HOUR_OF_DAY);  
    507.         String hour_str = "";  
    508.         int minute = calendar1.get(Calendar.MINUTE);  
    509.         String minute_str = "";  
    510.         if (hour < 10) {  
    511.             hour_str = "0" + hour;  
    512.         } else {  
    513.             hour_str = "" + hour;  
    514.         }  
    515.         if (minute >= 10) {  
    516.             minute_str = (minute + "").substring(01);  
    517.             minute = Integer.parseInt((minute + "").substring(12));  
    518.             if (minute >= 5) {  
    519.                 minute_str = minute_str + "4";  
    520.                 /* 
    521.                  * }else if(minute == 0){ minute_str = 
    522.                  * (Integer.parseInt(minute_str)-1)+"4"; 
    523.                  */  
    524.             } else {  
    525.                 minute_str = (Integer.parseInt(minute_str) - 1) + "" + 9;  
    526.             }  
    527.             return dayStr + " " + hour_str + ":" + minute_str + ":" + "59";  
    528.         } else {  
    529.             if (minute >= 5) {  
    530.                 calendar1.set(Calendar.MINUTE, 4);  
    531.             } else {  
    532.                 calendar1.set(Calendar.HOUR_OF_DAY, hour - 1);  
    533.                 calendar1.set(Calendar.MINUTE, 59);  
    534.             }  
    535.             calendar1.set(Calendar.SECOND, 59);  
    536.             return DateUtil.DateToString(calendar1.getTime(),  
    537.                     DateUtil.DEFAULT_DATE_FORMAT2);  
    538.         }  
    539.     }  
    540.   
    541.     /** 
    542.      * 返回当前时间前一小时的开始时间。 
    543.      *  
    544.      * @param date 
    545.      * @return 
    546.      */  
    547.     public static String getStartHourTimeStr(Date date) {  
    548.         Calendar calendar1 = Calendar.getInstance();  
    549.         calendar1.setTime(date);  
    550.         calendar1.add(Calendar.HOUR, -1);  
    551.         calendar1.set(Calendar.MINUTE, 0);  
    552.         calendar1.set(Calendar.SECOND, 0);  
    553.         return DateUtil.DateToString(calendar1.getTime(),  
    554.                 DateUtil.DEFAULT_DATE_FORMAT2);  
    555.     }  
    556.     /** 
    557.      * 返回当前时间前一小时的结束时间。 
    558.      *  
    559.      * @param date 
    560.      * @return 
    561.      */  
    562.     public static String getEndHourTimeStr(Date date) {  
    563.         Calendar calendar1 = Calendar.getInstance();  
    564.         calendar1.setTime(date);  
    565.         calendar1.add(Calendar.HOUR, -1);  
    566.         calendar1.set(Calendar.MINUTE, 59);  
    567.         calendar1.set(Calendar.SECOND, 59);  
    568.         return DateUtil.DateToString(calendar1.getTime(),  
    569.                 DateUtil.DEFAULT_DATE_FORMAT2);  
    570.     }  
    571.     /** 
    572.      * 获取一个星期的第一天 礼拜一的日期 
    573.      * 具体日期型 
    574.      *  例如:2015-12-23 
    575.      * @return 
    576.      */  
    577.     public static String getWeekStartStr(Date date) {  
    578. //      Calendar cal = Calendar.getInstance();  
    579. //      cal.setTime(date);  
    580. //      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
    581. //      cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); // 获取本周一的日期  
    582.           
    583.         Calendar c = Calendar.getInstance();  
    584.         c.setTime(date);  
    585.         int day_of_week = c.get(Calendar.DAY_OF_WEEK) - 1;  
    586.         if (day_of_week == 0)  
    587.             day_of_week = 7;  
    588.         c.add(Calendar.DATE, -day_of_week + 1);  
    589.         return DateUtil.DateToString(c.getTime(),  
    590.                 DateUtil.DATE_FORMAT);  
    591.     }  
    592.   
    593.     /** 
    594.      * 获取一个星期的最后日期 礼拜日的日期 
    595.      * 具体日期型 
    596.      *  例如:2015-12-23 
    597.      * @return 
    598.      */  
    599.     public static String getWeekEndStr(Date date) {  
    600. //      Calendar cal = Calendar.getInstance();  
    601. //      cal.setTime(date);  
    602. //      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
    603. //      cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);// 获取本周末的日期  
    604. //      cal.add(Calendar.WEEK_OF_YEAR, 1);// 增加一个星期,才是我们中国人理解的本周日的日期  
    605.           
    606.         Calendar c = Calendar.getInstance();  
    607.         c.setTime(date);  
    608.         int day_of_week = c.get(Calendar.DAY_OF_WEEK) - 1;  
    609.         if (day_of_week == 0)  
    610.             day_of_week = 7;  
    611.         c.add(Calendar.DATE, -day_of_week + 7);  
    612.             
    613.         return DateUtil.DateToString(c.getTime(),  
    614.                 DateUtil.DATE_FORMAT);  
    615.     }  
    616.   
    617.     /** 
    618.      * 得到当前日期所在周的第一天   
    619.      * 以时间戳形式 
    620.      * @param date 
    621.      * @return 
    622.      */  
    623.     public static long getWeekStartTime(Date date){  
    624.           
    625.         Timestamp start = DateUtil.cString2Timestamp(getWeekStartStr(date) + " 00:00:00",  
    626.                 DateUtil.DEFAULT_DATE_FORMAT2);  
    627.         return start.getTime();  
    628.       
    629.     }  
    630.       
    631.     /** 
    632.      * 得到当前日期所在周的最后一天 
    633.      * 以时间戳形式 
    634.      * @param date 
    635.      * @return 
    636.      */  
    637.     public static long getWeekEndTime(Date date){  
    638.           
    639.         Timestamp start = DateUtil.cString2Timestamp(getWeekEndStr(date) + " 23:59:59",  
    640.                 DateUtil.DEFAULT_DATE_FORMAT2);  
    641.         return start.getTime();  
    642.       
    643.     }  
    644.       
    645.       
    646.     /** 
    647.      * 获取一个月的第一天的日期日期 
    648.      * 具体日期型 
    649.      *  例如:2015-12-01 
    650.      * @return 
    651.      */  
    652.     public static String getMonthStartStr(Date date) {  
    653.         Calendar cal = Calendar.getInstance();  
    654.         cal.setTime(date);  
    655.         cal.add(Calendar.MONTH, 0);  
    656.         SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
    657.         cal.set(Calendar.DAY_OF_MONTH,1); // 获取本周一的日期  
    658.         return DateUtil.DateToString(cal.getTime(),  
    659.                 DateUtil.DATE_FORMAT);  
    660.     }  
    661.       
    662.     /** 
    663.      * 获取某个月的第几个月之前或者之后的日期 
    664.      * 具体日期型  datestr 是 2015-03-27   i是之前或者之后叠加日期 
    665.      * @return 
    666.      */  
    667.     public static String getMonthStarttime(String datestr,int i) {  
    668.         Date date=DateUtil.StringTodate(datestr, DateUtil.DATE_FORMAT);  
    669.         Calendar cal = Calendar.getInstance();  
    670.         cal.setTime(date);  
    671.         cal.add(Calendar.MONTH, i);  
    672.         SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
    673.     //  cal.set(Calendar.DAY_OF_MONTH,i); // 获取本周一的日期  
    674.         return df.format(cal.getTime());  
    675.     }  
    676.   
    677.   
    678.     /** 
    679.      * 获取一个月的最后日期 
    680.      * 具体日期型 
    681.      *  例如:2015-12-31 
    682.      * @return 
    683.      */  
    684.     public static String getMonthEndStr(Date date) {  
    685.         Calendar cal = Calendar.getInstance();  
    686.         cal.setTime(date);  
    687.         cal.add(Calendar.MONTH, 0);  
    688.         SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
    689.         cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));  
    690.         return DateUtil.DateToString(cal.getTime(),  
    691.                 DateUtil.DATE_FORMAT);  
    692.     }  
    693.       
    694.       
    695.     /** 
    696.      * 得到当前日期所在周的第一天   
    697.      * 以时间戳形式 
    698.      * @param date 
    699.      * @return 
    700.      */  
    701.     public static long getMonthStartTime(Date date){  
    702.           
    703.         Timestamp start = DateUtil.cString2Timestamp(getMonthStartStr(date) + " 00:00:00",  
    704.                 DateUtil.DEFAULT_DATE_FORMAT2);  
    705.         return start.getTime();  
    706.       
    707.     }  
    708.       
    709.     /** 
    710.      * 计算两个日期相差的月份  
    711.      * @param start String 类型的两个时间  如: 2015-03-27  
    712.      * @param end String 类型的两个时间  如: 2015-03-27  
    713.      * @return 
    714.      */  
    715.     public static int getDateMonth(String starttime, String endtime) {  
    716.         Date start=DateUtil.StringTodate(starttime, DateUtil.DATE_FORMAT);  
    717.         Date end=DateUtil.StringTodate(endtime, DateUtil.DATE_FORMAT);  
    718.         if (start.after(end)) {  
    719.             Date t = start;  
    720.             start = end;  
    721.             end = t;  
    722.         }  
    723.         Calendar startCalendar = Calendar.getInstance();  
    724.         startCalendar.setTime(start);  
    725.         Calendar endCalendar = Calendar.getInstance();  
    726.         endCalendar.setTime(end);  
    727.         Calendar temp = Calendar.getInstance();  
    728.         temp.setTime(end);  
    729.         temp.add(Calendar.DATE, 1);  
    730.   
    731.         int year = endCalendar.get(Calendar.YEAR)  
    732.                 - startCalendar.get(Calendar.YEAR);  
    733.         int month = endCalendar.get(Calendar.MONTH)  
    734.                 - startCalendar.get(Calendar.MONTH);  
    735.   
    736.         if ((startCalendar.get(Calendar.DATE) == 1)  
    737.                 && (temp.get(Calendar.DATE) == 1)) {  
    738.             return year * 12 + month + 1;  
    739.         } else if ((startCalendar.get(Calendar.DATE) != 1)  
    740.                 && (temp.get(Calendar.DATE) == 1)) {  
    741.             return year * 12 + month;  
    742.         } else if ((startCalendar.get(Calendar.DATE) == 1)  
    743.                 && (temp.get(Calendar.DATE) != 1)) {  
    744.             return year * 12 + month;  
    745.         } else {  
    746.             return (year * 12 + month - 1) < 0 ? 0 : (year * 12 + month);  
    747.         }  
    748.     }  
    749.       
    750.       
    751.     /** 
    752.      * 得到当前日期所在周的最后一天 
    753.      * 以时间戳形式 
    754.      * @param date 
    755.      * @return 
    756.      */  
    757.     public static long getMonthEndTime(Date date){  
    758.           
    759.         Timestamp start = DateUtil.cString2Timestamp(getMonthEndStr(date) + " 23:59:59",  
    760.                 DateUtil.DEFAULT_DATE_FORMAT2);  
    761.         return start.getTime();  
    762.       
    763.     }  
    764.       
    765.      /**   
    766.      * 计算两个日期之间相差的天数   
    767.      * @param smdate 较小的时间  
    768.      * @param bdate  较大的时间  
    769.      * @return 相差天数  
    770.      * @throws ParseException   
    771.      */      
    772.     public static int daysBetween(Date smdate,Date bdate) throws ParseException      
    773.     {      
    774.         SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");    
    775.         smdate=sdf.parse(sdf.format(smdate));    
    776.         bdate=sdf.parse(sdf.format(bdate));    
    777.         Calendar cal = Calendar.getInstance();      
    778.         cal.setTime(smdate);      
    779.         long time1 = cal.getTimeInMillis();                   
    780.         cal.setTime(bdate);      
    781.         long time2 = cal.getTimeInMillis();           
    782.         long between_days=(time2-time1)/(1000*3600*24);    
    783.               
    784.        return Integer.parseInt(String.valueOf(between_days));             
    785.     }      
    786.       
    787.     public static int getMonthSpace(String date1, String date2)throws ParseException {  
    788.         int result = 0;  
    789.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
    790.         Calendar c1 = Calendar.getInstance();  
    791.         Calendar c2 = Calendar.getInstance();  
    792.         c1.setTime(sdf.parse(date1));  
    793.         c2.setTime(sdf.parse(date2));  
    794.         result = c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH);  
    795.         return Math.abs(result);  
    796.   
    797.     }  
    798.   
    799.     static Calendar getCalendar(String time)    
    800.     {    
    801.         if (null == time)    
    802.         {    
    803.             return null;    
    804.         }    
    805.         String[] times = time.split("-");    
    806.         Calendar calendar = Calendar.getInstance();    
    807.         calendar.set(Integer.valueOf(times[0]), Integer.valueOf(times[1]), Integer.valueOf(times[2]));    
    808.         return calendar;    
    809.     }    
    810.       
    811.     public static int getMonth(String date1, String date2) {  
    812.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
    813.         Date start=null;  
    814.         Date end=null;  
    815.         try {  
    816.             start = sdf.parse(date1);  
    817.             end = sdf.parse(date2);  
    818.         } catch (ParseException e) {  
    819.             // TODO Auto-generated catch block  
    820.             e.printStackTrace();  
    821.         }  
    822.           
    823.         if (start.after(end)) {  
    824.             Date t = start;  
    825.             start = end;  
    826.             end = t;  
    827.         }  
    828.         Calendar startCalendar = Calendar.getInstance();  
    829.         startCalendar.setTime(start);  
    830.         Calendar endCalendar = Calendar.getInstance();  
    831.         endCalendar.setTime(end);  
    832.         Calendar temp = Calendar.getInstance();  
    833.         temp.setTime(end);  
    834.         temp.add(Calendar.DATE, 1);  
    835.   
    836.         int year = endCalendar.get(Calendar.YEAR)  
    837.                 - startCalendar.get(Calendar.YEAR);  
    838.         int month = endCalendar.get(Calendar.MONTH)  
    839.                 - startCalendar.get(Calendar.MONTH);  
    840.   
    841.         if ((startCalendar.get(Calendar.DATE) == 1)  
    842.                 && (temp.get(Calendar.DATE) == 1)) {  
    843.             return year * 12 + month + 1;  
    844.         } else if ((startCalendar.get(Calendar.DATE) != 1)  
    845.                 && (temp.get(Calendar.DATE) == 1)) {  
    846.             return year * 12 + month;  
    847.         } else if ((startCalendar.get(Calendar.DATE) == 1)  
    848.                 && (temp.get(Calendar.DATE) != 1)) {  
    849.             return year * 12 + month;  
    850.         } else {  
    851.             return (year * 12 + month - 1) < 0 ? 0 : (year * 12 + month);  
    852.         }  
    853.     }  
    854.       
    855.     /** 
    856.      * @param stringdate 2015-12-20 
    857.      * @return  2015年12月20日 
    858.      */  
    859.     public static String getDateYMD(String stringdate){  
    860.         String yearstr=stringdate.substring(0,4);  
    861.         String monthStr=stringdate.substring(5,7);  
    862.         String dayStr=stringdate.substring(8,10);  
    863.         String datestr=yearstr+"年"+monthStr+"月"+dayStr+"日";  
    864.         return datestr;  
    865.     }  
    866.      
    867.     /** 
    868.      *  
    869.      * @param stringdate  2015-12-20 
    870.      * @param 所跨月份可为正负 
    871.      * @return month=1 ,返回 2016-01-20 
    872.      */  
    873.     public static String getDateByMonth(String stringdate,int month) {  
    874.         Date date=DateUtil.StringTodate(stringdate, DATE_FORMAT);  
    875.         Calendar calendar = Calendar.getInstance();  
    876.         calendar.setTime(date);  
    877.         calendar.add(Calendar.MONTH, month);  
    878.         Date theDate = calendar.getTime();  
    879.         String datestr=DateUtil.DateToString(theDate, DATE_FORMAT);  
    880.         return datestr;  
    881.     }  
    882.       
    883.     public static void main(String[] args) {  
    884. //      Calendar cl = Calendar.getInstance();  
    885. //      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
    886. //      String date1="2015-01-11";  
    887. //      String date2="2014-12-04";  
    888. //      try {  
    889. //          cl.setTime(sdf.parse(date1));  
    890. //      } catch (ParseException e) {  
    891. //          // TODO Auto-generated catch block  
    892. //          e.printStackTrace();  
    893. //      }  
    894. //      System.out.println(cl.get(Calendar.WEEK_OF_YEAR));  
    895. //      Date date = StringTodate("2015-02-01", DateUtil.DATE_FORMAT);  
    896. //      System.out.println(getWeekEndStr(date));  
    897. //      String monthdatesend=DateUtil.cTimestampStr2String(DateUtil.getMonthEndTime(date)+"",DateUtil.DEFAULT_DATE_FORMAT2);                                                                                  
    898. //      System.out.println(monthdatesend);  
    899. //      System.out.println(DateUtil.getMonthStartStr(new Date()));  
    900.         String query_timeYMD="2016-06-22";  
    901.         //获取已知日期的周一和周末  
    902.         long startdate=DateUtil.getWeekStartTime(DateUtil.StringTodate(query_timeYMD, DateUtil.DATE_FORMAT));  
    903.         long enddate=DateUtil.getWeekEndTime(DateUtil.StringTodate(query_timeYMD, DateUtil.DATE_FORMAT));  
    904.         System.out.println(startdate+"----"+enddate);  
    905.           
    906.         //获取已知日期的月初和月末  
    907.         startdate=DateUtil.getMonthStartTime(DateUtil.StringTodate(query_timeYMD, DateUtil.DATE_FORMAT));  
    908.         enddate=DateUtil.getMonthEndTime(DateUtil.StringTodate(query_timeYMD, DateUtil.DATE_FORMAT));  
    909.         System.out.println(startdate+"----"+enddate);  
    910.           
    911.         Date day=new Date();  
    912.         String now=DateUtil.DateToString(day, DateUtil.DATE_FORMAT);  
    913.         String nowbefore1=DateUtil.dateAdd(now, -1,DateUtil.DATE_TYPE_DAY);//前1天日期  
    914.         Date day_1=DateUtil.StringTodate(nowbefore1, DateUtil.DATE_FORMAT);  
    915.         System.out.println(DateUtil.dayToTimestampStart(day_1));  
    916.     }  
    917. }  
    package com.gm.utils;  
  1.   
  2. import java.sql.Timestamp;  
  3. import java.text.ParseException;  
  4. import java.text.SimpleDateFormat;  
  5. import java.util.Calendar;  
  6. import java.util.Date;  
  7. /** 
  8.  * <p> 
  9.  * Title: 开发工具 
  10.  * </p> 
  11.  * <p> 
  12.  * Description: 时间工具类 
  13.  * </p> 
  14.  * <p> 
  15.  * Copyright: Copyright (c) 2007 
  16.  * </p> 
  17.  * <p> 
  18.  * Company: 
  19.  * </p> 
  20.  *  
  21.  * @version 1.0 
  22.  */  
  23. public class DateUtil {  
  24.     public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss SSS";  
  25.     public static final String DEFAULT_DATE_FORMAT2 = "yyyy-MM-dd HH:mm:ss";  
  26.     public static final String DATETIME_FORMAT = "yyyyMMddHHmmssSSS";  
  27.     public static final String DATE_FORMAT = "yyyy-MM-dd";  
  28.   
  29.     public static final String DATE_TYPE_DAY = "DAY";  
  30.     public static final String DATE_TYPE_MONTH = "MONTH";  
  31.     public static final String DATE_TYPE_YEAR = "YEAR";  
  32.     public static final String DATE_TYPE_WEEK = "WEEK";  
  33.     public static final String DATE_TYPE_HOUR = "HOUR";  
  34.     public static final String DATE_TYPE_MINUTE = "MINUTE";  
  35.     public static final String DATE_TYPE_SECOND = "SECOND";  
  36.     public static final SimpleDateFormat SIMPLEDATEFORMAT = new SimpleDateFormat(  
  37.             DEFAULT_DATE_FORMAT2);  
  38.   
  39.     public DateUtil() {  
  40.     }  
  41.   
  42.     /** 
  43.      * 将Date转换为字符串 
  44.      *  
  45.      * @param date 
  46.      *            Date 要转换的日期 
  47.      * @param dateFormatStr 
  48.      *            String 要转换的日期类型 
  49.      * @return String 返加String类型的日期 
  50.      */  
  51.     public static String DateToString(Date date, String dateFormatStr) {  
  52.         if (dateFormatStr == null || "".equals(dateFormatStr)) {  
  53.             dateFormatStr = DEFAULT_DATE_FORMAT;  
  54.         }  
  55.         SimpleDateFormat simpleDteFormat = new SimpleDateFormat(dateFormatStr);  
  56.         return simpleDteFormat.format(date);  
  57.     }  
  58.   
  59.     public static String DateToString(Date date) {  
  60.         return DateToString(date, DEFAULT_DATE_FORMAT2);  
  61.     }  
  62.   
  63.     /** 
  64.      * 跟参数参数day 返回 day 那天00:00:00 时候的时间戳long 
  65.      *  
  66.      * @return 
  67.      */  
  68.     public static Long dayToTimestampStart(Date day) {  
  69.         String dayStr = DateUtil.DateToString(day, DateUtil.DATE_FORMAT);  
  70.         Timestamp start = DateUtil.cString2Timestamp(dayStr + " 00:00:00",  
  71.                 DateUtil.DEFAULT_DATE_FORMAT2);  
  72.         return start.getTime();  
  73.     }  
  74.   
  75.     /** 
  76.      * 跟参数参数day 返回 day 那天23:59:59 时候的时间戳long 
  77.      *  
  78.      * @return 
  79.      */  
  80.     public static Long dayToTimestampEnd(Date day) {  
  81.         String dayStr = DateUtil.DateToString(day, DateUtil.DATE_FORMAT);  
  82.         Timestamp start = DateUtil.cString2Timestamp(dayStr + " 23:59:59",  
  83.                 DateUtil.DEFAULT_DATE_FORMAT2);  
  84.         return start.getTime();  
  85.     }  
  86.   
  87.   
  88.     /** 
  89.      * 跟参数参数day 返回 day 那天相隔多少秒的的时间戳时候的时间戳long 
  90.      * Date day 这个时间是带小时 分钟 秒的 用于5分钟 
  91.      * @return 
  92.      */  
  93.     public static Long dayTimeToTimestampStart(Date day,int temp) {  
  94.         String dayStr = DateUtil.DateToString(day, DateUtil.DEFAULT_DATE_FORMAT2);  
  95.   
  96.         String day_str = dayStr.substring(0,15);  
  97.         String day_str_start = day_str+"0:00";  
  98.         Timestamp start = DateUtil.cString2Timestamp(day_str_start,  
  99.                 DateUtil.DEFAULT_DATE_FORMAT2);  
  100.         long start_time = start.getTime() - temp;//  
  101.         return start_time;  
  102.     }  
  103.       
  104.       
  105.     /** 
  106.      * 跟参数参数day 返回 day 那天相隔多少秒的的时间戳时候的时间戳long 
  107.      * Date day 这个时间是带小时 分钟 秒的 
  108.      * @return 
  109.      */  
  110.     public static Long dayTimeToTimestampEnd(Date day,int temp) {  
  111.         String dayStr = DateUtil.DateToString(day, DateUtil.DEFAULT_DATE_FORMAT2);  
  112.         //if()  
  113.         String day_str = dayStr.substring(0,15);  
  114.         String day_str_end = day_str+"0:00";  
  115.         Timestamp start = DateUtil.cString2Timestamp(day_str_end,  
  116.                 DateUtil.DEFAULT_DATE_FORMAT2);  
  117.         long end_time = start.getTime() + temp;//  
  118.         return end_time;  
  119.     }  
  120.       
  121.     /** 
  122.      * 跟参数参数day 返回 day 那天相隔多少秒的的时间戳时候的时间戳long 
  123.      * Date day 这个时间是带小时 分钟 秒的 用于1小时 
  124.      * @return 
  125.      */  
  126.     public static Long dayTimeToTimestampStartOneHour(Date day,int temp) {  
  127.         String dayStr = DateUtil.DateToString(day, DateUtil.DEFAULT_DATE_FORMAT2);  
  128.   
  129.         String day_str = dayStr.substring(0,14);  
  130.         String day_str_start = day_str+"00:00";  
  131.         Timestamp start = DateUtil.cString2Timestamp(day_str_start,  
  132.                 DateUtil.DEFAULT_DATE_FORMAT2);  
  133.         long start_time = start.getTime() - temp;//  
  134.         return start_time;  
  135.     }  
  136.     /** 
  137.      * 将string转换成指定类型的Timestamp 
  138.      *  
  139.      * @param str 
  140.      *            String 被转换的String类型的日期 
  141.      * @param type 
  142.      *            String 日期格式 
  143.      * @return Long 返加long类型的日期 如:1368979200 
  144.      */  
  145.     public static Long cString2Timestamp2(String str, String type) {  
  146.         if (type == null || type.equals("")) {  
  147.             type = DEFAULT_DATE_FORMAT2;  
  148.         }  
  149.         if (str.length() <= 10) {  
  150.             str = str + " 00:00:00";  
  151.         }  
  152.         SimpleDateFormat df = new java.text.SimpleDateFormat(type);  
  153.         try {  
  154.             return new Timestamp(df.parse(str).getTime() / 1000).getTime();  
  155.         } catch (ParseException e) {  
  156.             e.printStackTrace();  
  157.             return null;  
  158.         }  
  159.     }  
  160.   
  161.     /** 
  162.      * 返回当前日期时间的字符串 
  163.      *  
  164.      * @param dateFormatStr 
  165.      *            String 要转换的日期类型 
  166.      * @return String 返加String类型的日期 
  167.      */  
  168.     public static String getCurrentDateTime(String dateFormatStr) {  
  169.         if (dateFormatStr == null || "".equals(dateFormatStr)) {  
  170.             dateFormatStr = DEFAULT_DATE_FORMAT2;  
  171.         }  
  172.         Date date = new Date();  
  173.         SimpleDateFormat simpleDteFormat = new SimpleDateFormat(dateFormatStr);  
  174.         return simpleDteFormat.format(date);  
  175.     }  
  176.   
  177.     /** 
  178.      * 返回当前日期的字符串 
  179.      *  
  180.      * @param dateFormatStr 
  181.      *            String 日期格式 
  182.      * @return String 返回当前日期的字符串 
  183.      */  
  184.     public static String getCurrentDate(String dateFormatStr) {  
  185.         if (dateFormatStr == null || "".equals(dateFormatStr)) {  
  186.             dateFormatStr = DATE_FORMAT;  
  187.         }  
  188.         Date date = new Date();  
  189.         SimpleDateFormat simpleDteFormat = new SimpleDateFormat(dateFormatStr);  
  190.         return simpleDteFormat.format(date);  
  191.     }  
  192.   
  193.     /** 
  194.      * 将字符串转换为Date 
  195.      *  
  196.      * @param strDate 
  197.      *            String 被转换的String类型的日期 
  198.      * @param strDateFormat 
  199.      *            String Date格式 
  200.      * @return Date 返加Date类型的日期 
  201.      */  
  202.     public static Date StringTodate(String strDate, String strDateFormat) {  
  203.         if (strDate == null || "".equals(strDateFormat)  
  204.                 || strDateFormat == null) {  
  205.             strDateFormat = DEFAULT_DATE_FORMAT2;  
  206.         }  
  207.         Date rDate;  
  208.         SimpleDateFormat format = new SimpleDateFormat(strDateFormat);  
  209.         try {  
  210.             rDate = format.parse(strDate);  
  211.         } catch (Exception e) {  
  212.             e.printStackTrace();  
  213.             return null;  
  214.         }  
  215.         return rDate;  
  216.     }  
  217.   
  218.     /** 
  219.      * 将string转换成指定类型的Timestamp 
  220.      *  
  221.      * @param str 
  222.      *            String 被转换的String类型的日期 
  223.      * @param type 
  224.      *            String 日期格式 
  225.      * @return Timestamp 返加Timestamp类型的日期 
  226.      */  
  227.     public static Timestamp cString2Timestamp(String str, String type) {  
  228.         if (type == null || type.equals("")) {  
  229.             type = DEFAULT_DATE_FORMAT2;  
  230.         }  
  231.         if (str.length() <= 10) {  
  232.             str = str + " 00:00:00";  
  233.         }  
  234.         SimpleDateFormat df = new java.text.SimpleDateFormat(type);  
  235.         try {  
  236.             return new Timestamp(df.parse(str).getTime() / 1000);  
  237.         } catch (ParseException e) {  
  238.             e.printStackTrace();  
  239.             return null;  
  240.         }  
  241.     }  
  242.   
  243.     public static Timestamp getTimeStamp() {  
  244.         return cString2Timestamp(getCurrentDateTime(null), null);  
  245.     }  
  246.   
  247.     /** 
  248.      * 将Timestamp转换成指定类型的string 
  249.      *  
  250.      * @param ts 
  251.      *            Timestamp 被转换的Timestamp类型的日期 
  252.      * @param type 
  253.      *            String 日期格式 
  254.      * @return String 返加String类型的日期 
  255.      */  
  256.     public static String cTimestamp2String(Timestamp ts, String type) {  
  257.         SimpleDateFormat df = new java.text.SimpleDateFormat(type);  
  258.         return df.format(new java.util.Date(ts.getTime()));  
  259.     }  
  260.   
  261.     /** 
  262.      * 将long型的Timestamp值转换成指定类型的string 例如将1362120197734数值转换为制定类型的String日期 
  263.      *  
  264.      * @param ts 
  265.      *            Timestamp 被转换的Timestamp类型的日期 
  266.      * @param type 
  267.      *            String 日期格式 
  268.      * @return String 返加String类型的日期 
  269.      */  
  270.     public static String cTimestampLong2String(long ts, String type) {  
  271.         SimpleDateFormat df = new java.text.SimpleDateFormat(type);  
  272.         return df.format(new java.util.Date(ts * 1000));  
  273.     }  
  274.   
  275.     /** 
  276.      * 将字符串型的Timestamp值转换成指定类型的string 例如将"1362120197734" 字符创转换为制定类型的String日期 
  277.      *  
  278.      * @param ts 
  279.      *            Timestamp 被转换的Timestamp类型的日期 
  280.      * @param type 
  281.      *            String 日期格式 
  282.      * @return String 返加String类型的日期 
  283.      */  
  284.     public static String cTimestampStr2String(String ts, String type) {  
  285.         Double tmp = new Double(ts);  
  286.         tmp = Math.floor(tmp);  
  287.         return cTimestampLong2String(tmp.longValue(), type);  
  288.     }  
  289.   
  290.     /** 
  291.      * 将字符串型的Timestamp值转换成Date 例如将"1362120197734" 字符创转换为日期 
  292.      *  
  293.      * @param ts 
  294.      *            Timestamp 被转换的Timestamp类型的日期 
  295.      * @return date 
  296.      */  
  297.     public static Date cTimestampStr2Date(String ts) {  
  298.         Double tmp = new Double(ts);  
  299.         tmp = Math.floor(tmp);  
  300.         // long tem=Long.parseLong(ts);  
  301.         return StringTodate(  
  302.                 cTimestampLong2String(tmp.longValue(), DATE_FORMAT),  
  303.                 DATE_FORMAT);  
  304.     }  
  305.   
  306.     /** 
  307.      * 将Timestamp转换成date 
  308.      *  
  309.      * @param ts 
  310.      *            Timestamp 被转换的Timestamp类型的日期 
  311.      * @return Date 返加Date类型的日期 
  312.      */  
  313.     public static Date cTimestamp2Date(Timestamp ts) {  
  314.         String strDate = cTimestamp2String(ts, DEFAULT_DATE_FORMAT2);  
  315.         return StringTodate(strDate, DEFAULT_DATE_FORMAT2);  
  316.     }  
  317.   
  318.     /** 
  319.      * 日期相加函数 
  320.      *  
  321.      * @param sorDate 
  322.      *            String 被加的日期,必须为String类型 
  323.      * @param value 
  324.      *            int 天数,可为负数 
  325.      * @param dateType 
  326.      *            String 日期格式 
  327.      * @return String 相加后的日期,必须为String类型 
  328.      */  
  329.     public static String dateAdd(String sorDate, int value, String dateType) {  
  330.         if (dateType == null || value == 0 || sorDate == null) {  
  331.             return sorDate;  
  332.         }  
  333.         Date date = DateUtil.StringTodate(sorDate, DATE_FORMAT);  
  334.         Date getDate = DateUtil.dateAdd(date, value, dateType);  
  335.         return DateUtil.DateToString(getDate, DATE_FORMAT);  
  336.     }  
  337.   
  338.     /** 
  339.      * 日期相加函数 
  340.      *  
  341.      * @param sorDate 
  342.      *            Date 被加的日期,必须为Date类型 
  343.      * @param value 
  344.      *            int 天数,可为负数 
  345.      * @param dateType 
  346.      *            String 日期格式 
  347.      * @return Date 相加后的日期 
  348.      */  
  349.     public static Date dateAdd(Date sorDate, int value, String dateType) {  
  350.         if (dateType == null || value == 0 || sorDate == null) {  
  351.             return sorDate;  
  352.         }  
  353.         Calendar calendar = Calendar.getInstance();  
  354.         calendar.setTime(sorDate);  
  355.         if (dateType.equalsIgnoreCase(DATE_TYPE_SECOND)) {  
  356.             calendar.add(Calendar.SECOND, value);  
  357.         } else if (dateType.equalsIgnoreCase(DATE_TYPE_MINUTE)) {  
  358.             calendar.add(Calendar.MINUTE, value);  
  359.         } else if (dateType.equalsIgnoreCase(DATE_TYPE_HOUR)) {  
  360.             calendar.add(Calendar.HOUR, value);  
  361.         } else if (dateType.equalsIgnoreCase(DATE_TYPE_WEEK)) {  
  362.             calendar.add(Calendar.WEDNESDAY, value);  
  363.         } else if (dateType.equalsIgnoreCase(DATE_TYPE_DAY)) {  
  364.             calendar.add(Calendar.DATE, value);  
  365.         } else if (dateType.equalsIgnoreCase(DATE_TYPE_MONTH)) {  
  366.             calendar.add(Calendar.MONTH, value);  
  367.         } else if (dateType.equalsIgnoreCase(DATE_TYPE_YEAR)) {  
  368.             calendar.add(Calendar.YEAR, value);  
  369.         }  
  370.         return calendar.getTime();  
  371.     }  
  372.   
  373.     public static long getTimemillon(String start, String end) {  
  374.         try {  
  375.             Date startDate = SIMPLEDATEFORMAT.parse(start);  
  376.             Date endDate = SIMPLEDATEFORMAT.parse(end);  
  377.             return getTimemillon(startDate, endDate);  
  378.         } catch (ParseException e) {  
  379.             System.err.println("字符串: " + start + " or  " + end + " 转换日期错误");  
  380.             return 0;  
  381.         }  
  382.     }  
  383.   
  384.     public static long getTimemillon(Date startDate, Date endDate) {  
  385.         return endDate.getTime() - startDate.getTime();  
  386.     }  
  387.   
  388.     public static String getNowDateTimeStr() {  
  389.         return DateToString(new Date());  
  390.     }  
  391.   
  392.     public static String getNowDateString() {  
  393.         return DateToString(new Date(), DATE_FORMAT);  
  394.     }  
  395.   
  396.     /** 
  397.      * 获得当前时间的前一天,就是昨天的这个时刻 
  398.      *  
  399.      * @return 
  400.      */  
  401.     public static Date getYesterday() {  
  402.         Date date = new Date();  
  403.         return dateAdd(date, -1, DATE_TYPE_DAY);  
  404.   
  405.     }  
  406.   
  407.     // 得到个时间段的差值  
  408.     public static Long betWeenDate(String startDate, String endDate) {  
  409.         long zero = 0;  
  410.         Date start = DateUtil.StringTodate(startDate, DateUtil.DATE_FORMAT);  
  411.         Date end = DateUtil.StringTodate(endDate, DateUtil.DATE_FORMAT);  
  412.         long d1 = start.getTime();  
  413.         long d2 = end.getTime();  
  414.   
  415.         if (d2 - d1 == 0) {  
  416.             return zero;  
  417.         }  
  418.         long date = (d2 - d1) / (24 * 60 * 62 * 1000) + 1;  
  419.         return date;  
  420.     }  
  421.   
  422.     /** 
  423.      * 判断两天是否为同一天 
  424.      *  
  425.      * @param startDate 
  426.      * @param endDate 
  427.      * @return 
  428.      */  
  429.     public static boolean isSameDay(String startDate, String endDate) {  
  430.         boolean flag = false;  
  431.         Date start = DateUtil.StringTodate(startDate, DateUtil.DATE_FORMAT);  
  432.         Date end = DateUtil.StringTodate(endDate, DateUtil.DATE_FORMAT);  
  433.         Calendar calendar1 = Calendar.getInstance();  
  434.         calendar1.setTimeInMillis(start.getTime());  
  435.         Calendar calendar2 = Calendar.getInstance();  
  436.         calendar2.setTimeInMillis(end.getTime());  
  437.         if (calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR)  
  438.                 && calendar1.get(Calendar.MONTH) == calendar2  
  439.                         .get(Calendar.MONTH)  
  440.                 && calendar1.get(Calendar.DATE) == calendar2.get(Calendar.DATE)) {  
  441.             flag = true;  
  442.         }  
  443.         return flag;  
  444.     }  
  445.   
  446.     /** 
  447.      * 返回当前时间所属5分钟范围的开始时间。 
  448.      *  
  449.      * @param date 
  450.      * @return 
  451.      */  
  452.     public static String getStart5TimeStr(Date date) {  
  453.         String dayStr = DateUtil.DateToString(date, DateUtil.DATE_FORMAT);  
  454.         Calendar calendar1 = Calendar.getInstance();  
  455.         calendar1.setTime(date);  
  456.         int hour = calendar1.get(Calendar.HOUR_OF_DAY);  
  457.         String hour_str = "";  
  458.         int minute = calendar1.get(Calendar.MINUTE);  
  459.         String minute_str = "";  
  460.         if (hour < 10) {  
  461.             hour_str = "0" + hour;  
  462.         } else {  
  463.             hour_str = "" + hour;  
  464.         }  
  465.         if (minute >= 10) {  
  466.             minute_str = (minute + "").substring(01);  
  467.             minute = Integer.parseInt((minute + "").substring(12));  
  468.             if (minute >= 5) {  
  469.                 minute_str = minute_str + "0";  
  470.                 /* 
  471.                  * }else if(minute == 0){ minute_str = 
  472.                  * (Integer.parseInt(minute_str)-1)+"0"; 
  473.                  */  
  474.             } else {  
  475.                 minute_str = (Integer.parseInt(minute_str) - 1) + "" + 5;  
  476.             }  
  477.             return dayStr + " " + hour_str + ":" + minute_str + ":" + "00";  
  478.         } else {  
  479.             if (minute >= 5) {  
  480.                 calendar1.set(Calendar.MINUTE, 0);  
  481.             } else if (minute == 0) {  
  482.                 calendar1.set(Calendar.HOUR_OF_DAY, hour - 1);  
  483.                 calendar1.set(Calendar.MINUTE, 55);  
  484.             } else {  
  485.                 calendar1.set(Calendar.HOUR_OF_DAY, hour - 1);  
  486.                 calendar1.set(Calendar.MINUTE, 55);  
  487.             }  
  488.             calendar1.set(Calendar.SECOND, 0);  
  489.             return DateUtil.DateToString(calendar1.getTime(),  
  490.                     DateUtil.DEFAULT_DATE_FORMAT2);  
  491.         }  
  492.   
  493.     }  
  494.   
  495.     /** 
  496.      * 返回当前时间所属5分钟范围的结束时间。 
  497.      *  
  498.      * @param date 
  499.      * @return 
  500.      */  
  501.     public static String getEnd5TimeStr(Date date) {  
  502.         String dayStr = DateUtil.DateToString(date, DateUtil.DATE_FORMAT);  
  503.         Calendar calendar1 = Calendar.getInstance();  
  504.         calendar1.setTime(date);  
  505.         int hour = calendar1.get(Calendar.HOUR_OF_DAY);  
  506.         String hour_str = "";  
  507.         int minute = calendar1.get(Calendar.MINUTE);  
  508.         String minute_str = "";  
  509.         if (hour < 10) {  
  510.             hour_str = "0" + hour;  
  511.         } else {  
  512.             hour_str = "" + hour;  
  513.         }  
  514.         if (minute >= 10) {  
  515.             minute_str = (minute + "").substring(01);  
  516.             minute = Integer.parseInt((minute + "").substring(12));  
  517.             if (minute >= 5) {  
  518.                 minute_str = minute_str + "4";  
  519.                 /* 
  520.                  * }else if(minute == 0){ minute_str = 
  521.                  * (Integer.parseInt(minute_str)-1)+"4"; 
  522.                  */  
  523.             } else {  
  524.                 minute_str = (Integer.parseInt(minute_str) - 1) + "" + 9;  
  525.             }  
  526.             return dayStr + " " + hour_str + ":" + minute_str + ":" + "59";  
  527.         } else {  
  528.             if (minute >= 5) {  
  529.                 calendar1.set(Calendar.MINUTE, 4);  
  530.             } else {  
  531.                 calendar1.set(Calendar.HOUR_OF_DAY, hour - 1);  
  532.                 calendar1.set(Calendar.MINUTE, 59);  
  533.             }  
  534.             calendar1.set(Calendar.SECOND, 59);  
  535.             return DateUtil.DateToString(calendar1.getTime(),  
  536.                     DateUtil.DEFAULT_DATE_FORMAT2);  
  537.         }  
  538.     }  
  539.   
  540.     /** 
  541.      * 返回当前时间前一小时的开始时间。 
  542.      *  
  543.      * @param date 
  544.      * @return 
  545.      */  
  546.     public static String getStartHourTimeStr(Date date) {  
  547.         Calendar calendar1 = Calendar.getInstance();  
  548.         calendar1.setTime(date);  
  549.         calendar1.add(Calendar.HOUR, -1);  
  550.         calendar1.set(Calendar.MINUTE, 0);  
  551.         calendar1.set(Calendar.SECOND, 0);  
  552.         return DateUtil.DateToString(calendar1.getTime(),  
  553.                 DateUtil.DEFAULT_DATE_FORMAT2);  
  554.     }  
  555.     /** 
  556.      * 返回当前时间前一小时的结束时间。 
  557.      *  
  558.      * @param date 
  559.      * @return 
  560.      */  
  561.     public static String getEndHourTimeStr(Date date) {  
  562.         Calendar calendar1 = Calendar.getInstance();  
  563.         calendar1.setTime(date);  
  564.         calendar1.add(Calendar.HOUR, -1);  
  565.         calendar1.set(Calendar.MINUTE, 59);  
  566.         calendar1.set(Calendar.SECOND, 59);  
  567.         return DateUtil.DateToString(calendar1.getTime(),  
  568.                 DateUtil.DEFAULT_DATE_FORMAT2);  
  569.     }  
  570.     /** 
  571.      * 获取一个星期的第一天 礼拜一的日期 
  572.      * 具体日期型 
  573.      *  例如:2015-12-23 
  574.      * @return 
  575.      */  
  576.     public static String getWeekStartStr(Date date) {  
  577. //      Calendar cal = Calendar.getInstance();  
  578. //      cal.setTime(date);  
  579. //      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
  580. //      cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); // 获取本周一的日期  
  581.           
  582.         Calendar c = Calendar.getInstance();  
  583.         c.setTime(date);  
  584.         int day_of_week = c.get(Calendar.DAY_OF_WEEK) - 1;  
  585.         if (day_of_week == 0)  
  586.             day_of_week = 7;  
  587.         c.add(Calendar.DATE, -day_of_week + 1);  
  588.         return DateUtil.DateToString(c.getTime(),  
  589.                 DateUtil.DATE_FORMAT);  
  590.     }  
  591.   
  592.     /** 
  593.      * 获取一个星期的最后日期 礼拜日的日期 
  594.      * 具体日期型 
  595.      *  例如:2015-12-23 
  596.      * @return 
  597.      */  
  598.     public static String getWeekEndStr(Date date) {  
  599. //      Calendar cal = Calendar.getInstance();  
  600. //      cal.setTime(date);  
  601. //      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
  602. //      cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);// 获取本周末的日期  
  603. //      cal.add(Calendar.WEEK_OF_YEAR, 1);// 增加一个星期,才是我们中国人理解的本周日的日期  
  604.           
  605.         Calendar c = Calendar.getInstance();  
  606.         c.setTime(date);  
  607.         int day_of_week = c.get(Calendar.DAY_OF_WEEK) - 1;  
  608.         if (day_of_week == 0)  
  609.             day_of_week = 7;  
  610.         c.add(Calendar.DATE, -day_of_week + 7);  
  611.             
  612.         return DateUtil.DateToString(c.getTime(),  
  613.                 DateUtil.DATE_FORMAT);  
  614.     }  
  615.   
  616.     /** 
  617.      * 得到当前日期所在周的第一天   
  618.      * 以时间戳形式 
  619.      * @param date 
  620.      * @return 
  621.      */  
  622.     public static long getWeekStartTime(Date date){  
  623.           
  624.         Timestamp start = DateUtil.cString2Timestamp(getWeekStartStr(date) + " 00:00:00",  
  625.                 DateUtil.DEFAULT_DATE_FORMAT2);  
  626.         return start.getTime();  
  627.       
  628.     }  
  629.       
  630.     /** 
  631.      * 得到当前日期所在周的最后一天 
  632.      * 以时间戳形式 
  633.      * @param date 
  634.      * @return 
  635.      */  
  636.     public static long getWeekEndTime(Date date){  
  637.           
  638.         Timestamp start = DateUtil.cString2Timestamp(getWeekEndStr(date) + " 23:59:59",  
  639.                 DateUtil.DEFAULT_DATE_FORMAT2);  
  640.         return start.getTime();  
  641.       
  642.     }  
  643.       
  644.       
  645.     /** 
  646.      * 获取一个月的第一天的日期日期 
  647.      * 具体日期型 
  648.      *  例如:2015-12-01 
  649.      * @return 
  650.      */  
  651.     public static String getMonthStartStr(Date date) {  
  652.         Calendar cal = Calendar.getInstance();  
  653.         cal.setTime(date);  
  654.         cal.add(Calendar.MONTH, 0);  
  655.         SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
  656.         cal.set(Calendar.DAY_OF_MONTH,1); // 获取本周一的日期  
  657.         return DateUtil.DateToString(cal.getTime(),  
  658.                 DateUtil.DATE_FORMAT);  
  659.     }  
  660.       
  661.     /** 
  662.      * 获取某个月的第几个月之前或者之后的日期 
  663.      * 具体日期型  datestr 是 2015-03-27   i是之前或者之后叠加日期 
  664.      * @return 
  665.      */  
  666.     public static String getMonthStarttime(String datestr,int i) {  
  667.         Date date=DateUtil.StringTodate(datestr, DateUtil.DATE_FORMAT);  
  668.         Calendar cal = Calendar.getInstance();  
  669.         cal.setTime(date);  
  670.         cal.add(Calendar.MONTH, i);  
  671.         SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
  672.     //  cal.set(Calendar.DAY_OF_MONTH,i); // 获取本周一的日期  
  673.         return df.format(cal.getTime());  
  674.     }  
  675.   
  676.   
  677.     /** 
  678.      * 获取一个月的最后日期 
  679.      * 具体日期型 
  680.      *  例如:2015-12-31 
  681.      * @return 
  682.      */  
  683.     public static String getMonthEndStr(Date date) {  
  684.         Calendar cal = Calendar.getInstance();  
  685.         cal.setTime(date);  
  686.         cal.add(Calendar.MONTH, 0);  
  687.         SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
  688.         cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));  
  689.         return DateUtil.DateToString(cal.getTime(),  
  690.                 DateUtil.DATE_FORMAT);  
  691.     }  
  692.       
  693.       
  694.     /** 
  695.      * 得到当前日期所在周的第一天   
  696.      * 以时间戳形式 
  697.      * @param date 
  698.      * @return 
  699.      */  
  700.     public static long getMonthStartTime(Date date){  
  701.           
  702.         Timestamp start = DateUtil.cString2Timestamp(getMonthStartStr(date) + " 00:00:00",  
  703.                 DateUtil.DEFAULT_DATE_FORMAT2);  
  704.         return start.getTime();  
  705.       
  706.     }  
  707.       
  708.     /** 
  709.      * 计算两个日期相差的月份  
  710.      * @param start String 类型的两个时间  如: 2015-03-27  
  711.      * @param end String 类型的两个时间  如: 2015-03-27  
  712.      * @return 
  713.      */  
  714.     public static int getDateMonth(String starttime, String endtime) {  
  715.         Date start=DateUtil.StringTodate(starttime, DateUtil.DATE_FORMAT);  
  716.         Date end=DateUtil.StringTodate(endtime, DateUtil.DATE_FORMAT);  
  717.         if (start.after(end)) {  
  718.             Date t = start;  
  719.             start = end;  
  720.             end = t;  
  721.         }  
  722.         Calendar startCalendar = Calendar.getInstance();  
  723.         startCalendar.setTime(start);  
  724.         Calendar endCalendar = Calendar.getInstance();  
  725.         endCalendar.setTime(end);  
  726.         Calendar temp = Calendar.getInstance();  
  727.         temp.setTime(end);  
  728.         temp.add(Calendar.DATE, 1);  
  729.   
  730.         int year = endCalendar.get(Calendar.YEAR)  
  731.                 - startCalendar.get(Calendar.YEAR);  
  732.         int month = endCalendar.get(Calendar.MONTH)  
  733.                 - startCalendar.get(Calendar.MONTH);  
  734.   
  735.         if ((startCalendar.get(Calendar.DATE) == 1)  
  736.                 && (temp.get(Calendar.DATE) == 1)) {  
  737.             return year * 12 + month + 1;  
  738.         } else if ((startCalendar.get(Calendar.DATE) != 1)  
  739.                 && (temp.get(Calendar.DATE) == 1)) {  
  740.             return year * 12 + month;  
  741.         } else if ((startCalendar.get(Calendar.DATE) == 1)  
  742.                 && (temp.get(Calendar.DATE) != 1)) {  
  743.             return year * 12 + month;  
  744.         } else {  
  745.             return (year * 12 + month - 1) < 0 ? 0 : (year * 12 + month);  
  746.         }  
  747.     }  
  748.       
  749.       
  750.     /** 
  751.      * 得到当前日期所在周的最后一天 
  752.      * 以时间戳形式 
  753.      * @param date 
  754.      * @return 
  755.      */  
  756.     public static long getMonthEndTime(Date date){  
  757.           
  758.         Timestamp start = DateUtil.cString2Timestamp(getMonthEndStr(date) + " 23:59:59",  
  759.                 DateUtil.DEFAULT_DATE_FORMAT2);  
  760.         return start.getTime();  
  761.       
  762.     }  
  763.       
  764.      /**   
  765.      * 计算两个日期之间相差的天数   
  766.      * @param smdate 较小的时间  
  767.      * @param bdate  较大的时间  
  768.      * @return 相差天数  
  769.      * @throws ParseException   
  770.      */      
  771.     public static int daysBetween(Date smdate,Date bdate) throws ParseException      
  772.     {      
  773.         SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");    
  774.         smdate=sdf.parse(sdf.format(smdate));    
  775.         bdate=sdf.parse(sdf.format(bdate));    
  776.         Calendar cal = Calendar.getInstance();      
  777.         cal.setTime(smdate);      
  778.         long time1 = cal.getTimeInMillis();                   
  779.         cal.setTime(bdate);      
  780.         long time2 = cal.getTimeInMillis();           
  781.         long between_days=(time2-time1)/(1000*3600*24);    
  782.               
  783.        return Integer.parseInt(String.valueOf(between_days));             
  784.     }      
  785.       
  786.     public static int getMonthSpace(String date1, String date2)throws ParseException {  
  787.         int result = 0;  
  788.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
  789.         Calendar c1 = Calendar.getInstance();  
  790.         Calendar c2 = Calendar.getInstance();  
  791.         c1.setTime(sdf.parse(date1));  
  792.         c2.setTime(sdf.parse(date2));  
  793.         result = c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH);  
  794.         return Math.abs(result);  
  795.   
  796.     }  
  797.   
  798.     static Calendar getCalendar(String time)    
  799.     {    
  800.         if (null == time)    
  801.         {    
  802.             return null;    
  803.         }    
  804.         String[] times = time.split("-");    
  805.         Calendar calendar = Calendar.getInstance();    
  806.         calendar.set(Integer.valueOf(times[0]), Integer.valueOf(times[1]), Integer.valueOf(times[2]));    
  807.         return calendar;    
  808.     }    
  809.       
  810.     public static int getMonth(String date1, String date2) {  
  811.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
  812.         Date start=null;  
  813.         Date end=null;  
  814.         try {  
  815.             start = sdf.parse(date1);  
  816.             end = sdf.parse(date2);  
  817.         } catch (ParseException e) {  
  818.             // TODO Auto-generated catch block  
  819.             e.printStackTrace();  
  820.         }  
  821.           
  822.         if (start.after(end)) {  
  823.             Date t = start;  
  824.             start = end;  
  825.             end = t;  
  826.         }  
  827.         Calendar startCalendar = Calendar.getInstance();  
  828.         startCalendar.setTime(start);  
  829.         Calendar endCalendar = Calendar.getInstance();  
  830.         endCalendar.setTime(end);  
  831.         Calendar temp = Calendar.getInstance();  
  832.         temp.setTime(end);  
  833.         temp.add(Calendar.DATE, 1);  
  834.   
  835.         int year = endCalendar.get(Calendar.YEAR)  
  836.                 - startCalendar.get(Calendar.YEAR);  
  837.         int month = endCalendar.get(Calendar.MONTH)  
  838.                 - startCalendar.get(Calendar.MONTH);  
  839.   
  840.         if ((startCalendar.get(Calendar.DATE) == 1)  
  841.                 && (temp.get(Calendar.DATE) == 1)) {  
  842.             return year * 12 + month + 1;  
  843.         } else if ((startCalendar.get(Calendar.DATE) != 1)  
  844.                 && (temp.get(Calendar.DATE) == 1)) {  
  845.             return year * 12 + month;  
  846.         } else if ((startCalendar.get(Calendar.DATE) == 1)  
  847.                 && (temp.get(Calendar.DATE) != 1)) {  
  848.             return year * 12 + month;  
  849.         } else {  
  850.             return (year * 12 + month - 1) < 0 ? 0 : (year * 12 + month);  
  851.         }  
  852.     }  
  853.       
  854.     /** 
  855.      * @param stringdate 2015-12-20 
  856.      * @return  2015年12月20日 
  857.      */  
  858.     public static String getDateYMD(String stringdate){  
  859.         String yearstr=stringdate.substring(0,4);  
  860.         String monthStr=stringdate.substring(5,7);  
  861.         String dayStr=stringdate.substring(8,10);  
  862.         String datestr=yearstr+"年"+monthStr+"月"+dayStr+"日";  
  863.         return datestr;  
  864.     }  
  865.      
  866.     /** 
  867.      *  
  868.      * @param stringdate  2015-12-20 
  869.      * @param 所跨月份可为正负 
  870.      * @return month=1 ,返回 2016-01-20 
  871.      */  
  872.     public static String getDateByMonth(String stringdate,int month) {  
  873.         Date date=DateUtil.StringTodate(stringdate, DATE_FORMAT);  
  874.         Calendar calendar = Calendar.getInstance();  
  875.         calendar.setTime(date);  
  876.         calendar.add(Calendar.MONTH, month);  
  877.         Date theDate = calendar.getTime();  
  878.         String datestr=DateUtil.DateToString(theDate, DATE_FORMAT);  
  879.         return datestr;  
  880.     }  
  881.       
  882.     public static void main(String[] args) {  
  883. //      Calendar cl = Calendar.getInstance();  
  884. //      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
  885. //      String date1="2015-01-11";  
  886. //      String date2="2014-12-04";  
  887. //      try {  
  888. //          cl.setTime(sdf.parse(date1));  
  889. //      } catch (ParseException e) {  
  890. //          // TODO Auto-generated catch block  
  891. //          e.printStackTrace();  
  892. //      }  
  893. //      System.out.println(cl.get(Calendar.WEEK_OF_YEAR));  
  894. //      Date date = StringTodate("2015-02-01", DateUtil.DATE_FORMAT);  
  895. //      System.out.println(getWeekEndStr(date));  
  896. //      String monthdatesend=DateUtil.cTimestampStr2String(DateUtil.getMonthEndTime(date)+"",DateUtil.DEFAULT_DATE_FORMAT2);                                                                                  
  897. //      System.out.println(monthdatesend);  
  898. //      System.out.println(DateUtil.getMonthStartStr(new Date()));  
  899.         String query_timeYMD="2016-06-22";  
  900.         //获取已知日期的周一和周末  
  901.         long startdate=DateUtil.getWeekStartTime(DateUtil.StringTodate(query_timeYMD, DateUtil.DATE_FORMAT));  
  902.         long enddate=DateUtil.getWeekEndTime(DateUtil.StringTodate(query_timeYMD, DateUtil.DATE_FORMAT));  
  903.         System.out.println(startdate+"----"+enddate);  
  904.           
  905.         //获取已知日期的月初和月末  
  906.         startdate=DateUtil.getMonthStartTime(DateUtil.StringTodate(query_timeYMD, DateUtil.DATE_FORMAT));  
  907.         enddate=DateUtil.getMonthEndTime(DateUtil.StringTodate(query_timeYMD, DateUtil.DATE_FORMAT));  
  908.         System.out.println(startdate+"----"+enddate);  
  909.           
  910.         Date day=new Date();  
  911.         String now=DateUtil.DateToString(day, DateUtil.DATE_FORMAT);  
  912.         String nowbefore1=DateUtil.dateAdd(now, -1,DateUtil.DATE_TYPE_DAY);//前1天日期  
  913.         Date day_1=DateUtil.StringTodate(nowbefore1, DateUtil.DATE_FORMAT);  
  914.         System.out.println(DateUtil.dayToTimestampStart(day_1));  
  915.     }  
  916. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值