DateUtil-时间日期操作类
package com.zxt.basic.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * 时间日期操作类 <br/> * @author ZHENG YI <br/> */ public class DateUtil { /** 日期格式 */ public static final String FORMAT_DATE = "yyyy-MM-dd"; /** 日期时间格式 */ public static final String FORMAT_DATETIME = "yyyy-MM-dd HH:mm:ss"; /** 时间格式 */ public static final String FORMAT_TIME = "HH:mm:ss"; /** 整点时间格式 */ public static final String FORMAT_DATETIMEZD = "yyyy-MM-dd HH:00:00"; /** 日期格式(年, 月) */ public static final String FORMAT_YEARMONTH = "yyyy-MM"; /** 全时间格式 */ public static final String FORMAT_FULLTIME = "yyyyMMddHHmmssSSS"; /** * 根据规定格式的字符串得到Calendar * @param dateString 日期串 * @return 对应Calendar */ public static Calendar getCalendar (String dateString) { Calendar calendar = Calendar.getInstance(); String[] items = dateString.split("-"); calendar.set(Integer.parseInt(items[0]), Integer.parseInt(items[1]) - 1, Integer.parseInt(items[2])); return calendar; } /** * 根据指定的日期格式将时间日期字符串转化为Date对象 * @param dateString 时间或日期字符串 * @param format 格式 * @return Date */ public static java.util.Date getDateFromString (String dateString, String format) { SimpleDateFormat sdf = new SimpleDateFormat (format); try { return sdf.parse(dateString); } catch (ParseException e) { return null; } } /** * 将Date对象根据指定的时间格式转换为String字符串 * @param date Date * @param format 格式 * @return String */ public static String getStringFromDate (java.util.Date date, String format) { SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format(date); } public static void main(String[] args) { } /** * 转换时间字符串的格式 * @param dateString 时间字符串 * @param fromFormat 当前格式 * @param toFormat 转换格式 * @return String */ public static String changeFormat (String dateString, String fromFormat, String toFormat) { java.util.Date date = getDateFromString(dateString, fromFormat); if (date == null) return dateString; return getStringFromDate (date, toFormat); } /** * 取得当前日期时间的字符串表示形式 * @return String */ public static String getDateTime () { Calendar calendar = Calendar.getInstance(); return getStringFromDate(calendar.getTime(), FORMAT_DATETIME); } /** * 取得当前日期的字符串表现形式 * @return String */ public static String getDate () { Calendar calendar = Calendar.getInstance(); return getStringFromDate(calendar.getTime(), FORMAT_DATE); } /** * 取得当前时间的字符串表示形式 * @return String */ public static String getTime () { Calendar calendar = Calendar.getInstance(); return getStringFromDate(calendar.getTime(), FORMAT_TIME); } /** * 取得当前年的年份 * @return int */ public static int getYear () { Calendar calendar = Calendar.getInstance(); return calendar.get(Calendar.YEAR); } /** * 取得当前月的月份 * @return int */ public static int getMonth () { Calendar calendar = Calendar.getInstance(); return calendar.get(Calendar.MONTH); } /** * 取得当前日的日期 * @return int */ public static int getDay () { Calendar calendar = Calendar.getInstance(); return calendar.get(Calendar.DATE); } /** * 取得指定的日期字符串的星期数 * @param date 日期字符串 * @return String */ public static String getChineseDayOfWeek (String date) { Calendar calendar = getCalendar(date); int w = calendar.get(Calendar.DAY_OF_WEEK); String week = ""; switch (w) { case Calendar.SUNDAY: week = "星期日"; break; case Calendar.MONDAY: week = "星期一"; break; case Calendar.TUESDAY: week = "星期二"; break; case Calendar.WEDNESDAY: week = "星期三"; break; case Calendar.THURSDAY: week = "星期四"; break; case Calendar.FRIDAY: week = "星期五"; break; case Calendar.SATURDAY: week = "星期六"; break; default: week = "星期一"; break; } return week; } /** * 取得当前日期是星期几 * @return String */ public static String getDayOfWeek () { return getChineseDayOfWeek (getDate ()); } /** * 取得中文的数据字符串 * @param number 数字 * @return String */ public static String getChineseNumber (int number) { String n = ""; switch (number) { case 0: n = "O"; break; case 1: n = "一"; break; case 2: n = "二"; break; case 3: n = "三"; break; case 4: n = "四"; break; case 5: n = "五"; break; case 6: n = "六"; break; case 7: n = "七"; break; case 8: n = "八"; break; case 9: n = "九"; break; default: n = ""; break; } return n; } /** * 根据日期值得到中文日期字符串 * @param date 日期值 * @return 中文日期字符串 */ public static String getChineseDate(String date) { if (date.length() < 10) { return ""; } else { String year = date.substring(0, 4); String month = date.substring(5, 7); String day = date.substring(8, 10); String y1 = year.substring(0, 1); String y2 = year.substring(1, 2); String y3 = year.substring(2, 3); String y4 = year.substring(3, 4); String m2 = month.substring(1, 2); String d1 = day.substring(0, 1); String d2 = day.substring(1, 2); String cy1 = getChineseNumber(Integer.parseInt(y1)); String cy2 = getChineseNumber(Integer.parseInt(y2)); String cy3 = getChineseNumber(Integer.parseInt(y3)); String cy4 = getChineseNumber(Integer.parseInt(y4)); String cm2 = getChineseNumber(Integer.parseInt(m2)); String cd1 = getChineseNumber(Integer.parseInt(d1)); String cd2 = getChineseNumber(Integer.parseInt(d2)); String cYear = cy1 + cy2 + cy3 + cy4 + "年"; String cMonth = "月"; if (Integer.parseInt(month) > 9) { cMonth = "十" + cm2 + cMonth; } else { cMonth = cm2 + cMonth; } String cDay = "日"; if (Integer.parseInt(day) > 9) { cDay = cd1 + "十" + cd2 + cDay; } else { cDay = cd2 + cDay; } String chineseday = cYear + cMonth + cDay; return chineseday; } } /** * 根据日期值得到中文日期字符串 * 返回2005年09月23日格式的日期 * @param date 给定日期 * @return String */ public static String getChineseTwoDate(String date) { if (date.length() < 10) { return ""; } else { String year = date.substring(0, 4); String month = date.substring(5, 7); String day = date.substring(8, 10); return year + "年" + month + "月" + day + "日"; } } /** * 根据当天的日期值得到中文日期字符串 * 返回2005年09月23日格式的日期 * @return String */ public static String getChineseTwoDate() { return getChineseTwoDate(getDate()); } /** * 得到与指定日期相差指定天数的日期字符串 * @param dateString 指定的日期 * @param period 前后的天数,正值为后, 负值为前 * @param periodType 周期类别 可以是天、月、年 * @return 日期字符串 */ public static String getCertainDate (String date, int period, int periodType) { Calendar calendar = getCalendar(date); switch (periodType) { case Calendar.DATE: calendar.add(Calendar.DATE, period); break; case Calendar.MONTH: calendar.add(Calendar.MONTH, period); break; case Calendar.YEAR: calendar.add(Calendar.YEAR, period); break; default: break; } return getStringFromDate(calendar.getTime(), FORMAT_DATE); } /** * 得到与指定日期相差指定天数的日期字符串 * @param dateString 指定的日期 * @param days 前后的天数,正值为后, 负值为前 * @return 日期字符串 */ public static String getCertainDate(String dateString, int days) { Calendar calendar = getCalendar(dateString); calendar.add(Calendar.DATE, days); return getStringFromDate(calendar.getTime(), FORMAT_DATE); } /** * 得到指定日期的星期一的日期 * @param dateString 日期字符串 * @return 本周星期一的日期 */ public static String getFirstDateOfWeek(String dateString) { Calendar calendar = getCalendar(dateString); int iCount; if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { iCount = -6; } else { iCount = Calendar.MONDAY - calendar.get(Calendar.DAY_OF_WEEK); } return getCertainDate(dateString, iCount); } /** * 返回两个时间相差的小时数 * @param beginTime 开始时间 * @param endTime 结束时间 * @return 返回值 */ public static double getDiffHoure(String beginTime, String endTime) { double dif = 0; try { java.util.Date eDatetime = getDateFromString(endTime, FORMAT_DATE); java.util.Date bDatetime = getDateFromString(beginTime, FORMAT_DATE); dif = (eDatetime.getTime() - bDatetime.getTime()) / 1000 / 3600; } catch (Exception e) { dif = 0; } return dif; } /** * 得到当前日期的所在月的第一天的日期 * @param date 当前日期 * @return String 返回的日期 */ public static String getMonthFirstDay(String date) { Calendar cal = getCalendar(date); String month = String.valueOf(cal.get(Calendar.MONTH) + 1); String year = String.valueOf(cal.get(Calendar.YEAR)); if (Integer.parseInt(month) < 10) { month = "0" + month; } return year + "-" + month + "-01"; } /** * 得到当前日期的所在月的最后一天的日期 * @param date 当前日期 * @return String 返回的日期 */ public static String getMonthLastDay(String date) { Calendar cal = getCalendar(date); int month = cal.get(Calendar.MONTH) + 1; int year = cal.get(Calendar.YEAR); int nextMonth = month + 1; int nextYear = year; if (nextMonth == 13) { nextMonth = 1; nextYear = nextYear + 1; } String nextMonthFirstDay = nextYear + "-" + nextMonth + "-01"; return getCertainDate(nextMonthFirstDay, -1); } /** * 取得两日期间的月份差数 * @param startDate 起始日期 * @param endDate 结束日期 * @return 月份差数 */ public static int getMonthDiff(String startDate, String endDate) { String[] startArray = startDate.split("-"); String[] endArray = endDate.split("-"); int startYear = Integer.parseInt(startArray[0]); int startMonth = Integer.parseInt(startArray[1]); int endYear = Integer.parseInt(endArray[0]); int endMonth = Integer.parseInt(endArray[1]); return Math.abs((endYear - startYear) * 12 + endMonth - startMonth); } /** * * @author liheng * 获得特定日期之后的固定天数的某一天 * @param date 传入的日期 * @param days 要增加的天数 * @return Date 获取的目标日期 * @exception * @since 1.0.0 */ public static Date addDays(Date date,int days){ Date date1 = null; try{ if(null==date ){ return date1; } Calendar calendar=Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DATE, days); date1 = calendar.getTime(); }catch(Exception e){ e.printStackTrace(); }finally{ return date1; } } /** * * @author liheng * 获得日期相减后的天数 * @param minuendDate 被减数日期 * @param subDate 减数日期 * @return long 相差的天数 * @exception * @since 1.0.0 */ public static int subDate(Date minuendDate,Date subDate){ if(minuendDate!=null && subDate!=null ){ long timeMillions=(minuendDate.getTime()-subDate.getTime())%(24*60*60*1000); int days= new Long((minuendDate.getTime()-subDate.getTime())/(24*60*60*1000)).intValue(); if(timeMillions==0){ return days; }else{ return days+1; } }else{ return 0; } } }