package com.wdf.commons.util; import java.sql.Timestamp; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; import java.util.TimeZone; /** * 日期操作的工具类,主要实现了日期的常用操作 * <p> * 在工具类中经常使用到工具类格式化的描述,这个主要是一个日期操作类,所以日期的格式 * 主要使用SimpleDateFormat的定义格式 * <p> * 格式的意义如下:日期时间模式<br> * 日期时间格式由日期和时间模式字符串指定,在日期时间模式字符串中,未加引号的字母 * 'A'到'Z'和'a'到'z'被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号(') * 引起来以免进行解释。 * "'"表示单引号所有其他字符均不解释;只是在格式上将他们简单复制到输出字符串,或者在分析时与输入字符串进行匹配。 * @author 王德峰 *@2013-2-26 *@下午08:24:21 */ public final class DateUtil { public static final String datePartition = "-"; public static final String defaultDatePattern = "yyyy-MM-dd"; public static final String defaultDateTimePattern = "yyyy-MM-dd HH:mm:ss"; public static final String default_Time_Pattern = "HH:mm:ss"; private DateUtil(){ //因为是工具类,私有构造方法 } /** * 获得当前日期的字符串 * 格式yyyy-MM-dd * @return */ public static String nowDateString(){ SimpleDateFormat format = new SimpleDateFormat(defaultDatePattern); return format.format(new Date()); } /** * 获得当前时间的字符串 * 格式yyyy-MM-dd HH:mm:ss * @return */ public static String nowTimeString(){ SimpleDateFormat format = new SimpleDateFormat(defaultDateTimePattern); return format.format(new Date()); } /** * 根据模板返回给定long 型时间的字符串格式 * 模板可以为空 * 为空则返回默认格式的时间串 * @param time * @param datePattern * @return */ public static String longToString(long time, String datePattern){ SimpleDateFormat format; if(UtileProving.isEmpty(datePattern)){ format = new SimpleDateFormat(defaultDateTimePattern); }else{ format = new SimpleDateFormat(datePattern); } return format.format(new Date(time)); } /** * 返回给定long 型时间的字符串格式 * @param time * @return */ public static String longToString(long time){ return longToString(time); } /** * 获得格林尼治时间 * @param dateTime * @return */ public static String toGmtTimestampString(Date dateTime) { /** * DateFormat.getDateTimeInstance() * 获取日期/时间格式器,该格式器具有默认语言环境的默认格式化风格。 * TimeZone表示时区偏移量,也可以计算夏令时 * TimeZone.getTimeZone("GMT") * 获取给定id的TimeZone */ DateFormat df = DateFormat.getDateTimeInstance(); df.setTimeZone(TimeZone.getTimeZone("GMT")); return df.format(dateTime); } /** * Timestamp * 一个与 java.util.Date 类有关的瘦包装器 (thin wrapper), * 它允许 JDBC API 将该类标识为 SQL TIMESTAMP 值。 * 它通过允许小数秒到纳秒级精度的规范来添加保存 SQL TIMESTAMP 小数秒值的能力。 * 也提供支持时间戳值的 JDBC 转义语法的格式化和解析操作的能力。 * @param start * @param days * @return */ public static Timestamp addDaysToTimestamp(Date start, int days) { return new Timestamp(start.getTime() + (24 * 60 * 60 * 1000 * days)); } public static Timestamp addDaysToTimestamp(Date start, Double days) { return new Timestamp(start.getTime() + ((int) (24 * 60 * 60 * 1000 * days))); } /** * 返回当前时间格式 * 2013-02-26 21:24:29.578 * @return */ public static java.sql.Timestamp nowTimestamp() { return new java.sql.Timestamp(System.currentTimeMillis()); } /** * 获得给定时间给定天数后的时间 * @param stamp * @param daysLater * @return 给定时间给定天数后的起始时间long型值 */ public static long getDayStart(Date stamp,int daysLater){ Calendar tempCal = Calendar.getInstance(); tempCal.setTime(stamp); tempCal.set(tempCal.get(Calendar.YEAR), tempCal.get(Calendar.MONTH), tempCal.get(Calendar.DAY_OF_MONTH), 0, 0, 0); tempCal.add(Calendar.DAY_OF_MONTH, daysLater); return tempCal.getTime().getTime(); } /** * 获得给定时间的开始时间long 型值 * @param stamp * @return */ public static long getDayStart(Date stamp) { return getDayStart(stamp, 0); } /** * * @param input * @param startOfWeek * @return */ public static int weekNumber(Timestamp input, int startOfWeek) { Calendar calendar = Calendar.getInstance(); calendar.setFirstDayOfWeek(startOfWeek); if (startOfWeek == Calendar.MONDAY) { calendar.setMinimalDaysInFirstWeek(4); } else if (startOfWeek == Calendar.SUNDAY) { calendar.setMinimalDaysInFirstWeek(3); } calendar.setTime(new java.util.Date(input.getTime())); return calendar.get(Calendar.WEEK_OF_YEAR); } public static int weekNumber(Timestamp input) { Calendar calendar = Calendar.getInstance(); return weekNumber(input, calendar.getFirstDayOfWeek()); } /** * 获得给定时间的下一天的开始时间 * @param stamp * @return */ public static long getNextDayStart(java.sql.Timestamp stamp) { return getDayStart(stamp, 1); } /** * 获得给定时间给定天数后的结束时间long型值 * @param stamp * @param daysLater * @return */ public static long getDayEnd(Date stamp, int daysLater) { Calendar tempCal = Calendar.getInstance(); tempCal.setTime(stamp); tempCal.set(tempCal.get(Calendar.YEAR), tempCal.get(Calendar.MONTH), tempCal.get(Calendar.DAY_OF_MONTH), 23, 59, 59); tempCal.add(Calendar.DAY_OF_MONTH, daysLater); return tempCal.getTime().getTime(); } /** * 获得给定时间当天的结束时间long型值 * @param stamp * @return */ public static long getDayEnd(Date stamp) { return getDayEnd(stamp, 0); } public static Date parseDate(String str, String format){ if(format == null){ format = defaultDatePattern; } SimpleDateFormat df = new SimpleDateFormat(format); try { return df.parse(str); } catch (Exception e) { throw new RuntimeException("Could not convert " + str + " to java.util.Date", e); } } /** * 将日期字符串格式转换成java.util.Date类型 * @param date 日期时间格式为:YYYY-MM-DD HH:MM:SS * @return */ public static java.util.Date toDate(String date){ if(date.indexOf(":") < 0 ){ return parseDate(date, defaultDatePattern); }else{ int timeColon1 = date.indexOf(":"); int timeColon2 = date.lastIndexOf(":"); if(timeColon1 == timeColon2){ return parseDate(date + "00", defaultDateTimePattern); }else{ return parseDate(date, defaultDateTimePattern); } } } /** * 将日期时间字符串转换成java.util.Date类型 * @param date日期字符串格式:YYYY-MM-DD * @param time时间字符串格式:HH:MM or HH:MM:SS * @return */ public static java.util.Date toDate(String date, String time){ if(date == null || time == null){ return null; } return toDate(date +"" + time); } /** * 将日期、时间的整数转换为java.util.Date类型 * @param month 月份整数 * @param day 日整数 * @param year 年整数 * @param hour 小时整数 * @param minute 分钟整数 * @param second 秒整数 * @return */ public static java.util.Date toDate(int month, int day, int year, int hour, int minute, int second){ Calendar calendar = Calendar.getInstance(); try { calendar.set(year, month - 1, day, hour, minute, second); calendar.set(Calendar.MILLISECOND, 0); } catch (Exception e) { return null; } return new java.util.Date(calendar.getTime().getTime()); } /** * 将日期时间字符串转换成java.util.Date类型 * @param monthStr 月份字符串 * @param dayStr 日字字符串 * @param yearStr 年字符串 * @param hourStr 小时字符串 * @param minuteStr 分钟字符串 * @param secondStr 秒字符串 * @return */ public static java.util.Date toDate(String monthStr, String dayStr, String yearStr, String hourStr, String minuteStr, String secondStr){ int month, day, year, hour, minute, second; try { month = Integer.parseInt(monthStr); day = Integer.parseInt(dayStr); year = Integer.parseInt(yearStr); hour = Integer.parseInt(hourStr); minute = Integer.parseInt(minuteStr); second = Integer.parseInt(secondStr); } catch (Exception e) { return null; } return toDate(month, day, year, hour, minute, second); } /** * 将日期字符串转换成java.util.Date类型 * @param date 日期格式的字符串 * @return */ public static java.sql.Date toSqlDate(String date){ java.util.Date newDate = toDate(date, "00:00:00"); if(newDate != null){ return new java.sql.Date(newDate.getTime()); }else{ return null; } } /** * 创建一个日期对象 * @param monthStr月份的字符串 * @param dayStr 日的字符串 * @param yearStr 年的字符串 * @return */ public static java.sql.Date toSqlDate(String monthStr, String dayStr, String yearStr){ java.util.Date newDate = toDate(monthStr, dayStr, yearStr, "0", "0", "0"); if(newDate != null){ return new java.sql.Date(newDate.getTime()); }else{ return null; } } /** * 创建一个日期对象 * @param month 月份数字 * @param day 日数字 * @param year 年数字 * @return */ public static java.sql.Date toSqlDate(int month, int day, int year){ java.util.Date newDate = toDate(month, day, year, 0, 0, 0); if(newDate != null){ return new java.sql.Date(newDate.getTime()); }else{ return null; } } /** * 将时间格式字符串转换为java.sql.Time类型 * @param time 时间字符串 格式为:HH:MM:SS * @return */ public static java.sql.Time toSqlTime(String time){ java.util.Date newDate = toDate("1970" + datePartition + "1" + datePartition + "1", time); if(newDate != null){ return new java.sql.Time(newDate.getTime()); }else{ return null; } } /** * 创建java.sql.Time类型 * @param hourStr 小时字符串 * @param minuteStr 分钟字符串 * @param secondStr 秒字符串 * @return */ public static java.sql.Time toSqlTime(String hourStr, String minuteStr, String secondStr){ java.util.Date newDate = toDate("0", "0", "0", hourStr, minuteStr, secondStr); if(newDate != null){ return new java.sql.Time(newDate.getTime()); }else{ return null; } } /** * 创建java.sql.Time类型 * @param hourStr 小时的整数 * @param minuteStr 分钟的整数 * @param secondStr 秒的整数 * @return */ public static java.sql.Time toSqlTime(int hour, int minute, int second){ java.util.Date newDate = toDate(0, 0, 0, hour, minute, second); if(newDate != null){ return new java.sql.Time(newDate.getTime()); }else{ return null; } } /** * 将字符串转换成 java.sql.Timestamp类型 * @param dateTime日期、时间格式的字符串 如:"2013-03-05 21:11:00" * @return */ public static java.sql.Timestamp toTimestamp(String dateTime){ java.util.Date newDate = toDate(dateTime); if(newDate != null){ return new java.sql.Timestamp(newDate.getTime()); }else{ return null; } } /** * 将给定的时间日期字符串转换为java.sql.Timestamp类型 * @param date 日期字符串 如"2013-03-05" * @param time时间字符串如"21:11:00" * @return */ public static java.sql.Timestamp toTimestamp(String date, String time){ if(UtileProving.isEmpty(date) || UtileProving.isEmail(time)){ return null; } return toTimestamp(date + " " + time); } /** * 将给定的日期字符串转换成java.sql.Timestamp类型 * @param monthStr 月份字符串 * @param dayStr 日字符串 * @param yearStr 年字符串 * @param hourStr 小时字符串 * @param minuteStr 分钟字符串 * @param secondStr 秒字符串 * @return */ public static java.sql.Timestamp toTimestamp(String monthStr, String dayStr, String yearStr, String hourStr, String minuteStr, String secondStr){ java.util.Date newDate = toDate(monthStr, dayStr, yearStr, hourStr, minuteStr, secondStr); if(newDate != null){ return new java.sql.Timestamp(newDate.getTime()); }else{ return null; } } /** * 将给定的日期整数转换成java.sql.Timestamp类型 * @param month 月份整数 * @param day 日整数 * @param year 年整数 * @param hour 小时整数 * @param minute 分钟整数 * @param second 秒整数 * @return */ public static java.sql.Timestamp toTimestamp(int month, int day, int year, int hour, int minute, int second){ java.util.Date newDate = toDate(month, day, year, hour, minute, second); if(newDate != null){ return new java.sql.Timestamp(newDate.getTime()); }else{ return null; } } /** * 将给定日期字符串转换成long值 * @param date * @return */ public static long toLong(String date){ if(date.indexOf(':') < 0){ return parseDate(date, defaultDatePattern).getTime(); }else{ int timeColon1 = date.indexOf(":"); int timeColon2 = date.lastIndexOf(":"); if(timeColon1 == timeColon2){ return parseDate(date + ":00", defaultDateTimePattern).getTime(); }else{ return parseDate(date, defaultDateTimePattern).getTime(); } } } public static DateFormat toTimeFormat(String timeFormat, Locale locale){ DateFormat format = null; if(timeFormat == null){ format = DateFormat.getDateInstance(DateFormat.MEDIUM, locale); }else{ format = new SimpleDateFormat(timeFormat); } return format; } /** * 将java.util.Date类型转换为字符串格式为:YYYY-MM-DD * @param date * @return */ public static String toDateString(java.util.Date date){ SimpleDateFormat format = new SimpleDateFormat(defaultDatePattern); return format.format(date); } /** * 将java.util.Date类型转换为字符串格式为:HH:MM:SS * @param date * @return */ public static String toTimeString(java.util.Date date){ if(date == null){ return ""; } SimpleDateFormat format = new SimpleDateFormat(default_Time_Pattern); return format.format(date); } /** * 将时间的整数转换成标准格式的字符串格式:HH:MM:SS * @param hour 小时整数 * @param minute 分钟整数 * @param second 秒整数 * @return */ public static String toTimeString(int hour, int minute, int second){ String hourStr; String minuteStr; String secondStr; if(hour < 10){ hourStr = "0" + hour; }else{ hourStr = "" + hour; } if(minute < 10){ minuteStr = "0" + minute; }else{ minuteStr = "" + minute; } if(second < 10){ secondStr = "0" + second; }else{ secondStr = "" + second; } if(second == 0){ return hourStr + ":" + minuteStr; }else{ return hourStr + ":" + minuteStr + ":" + secondStr; } } /** * 将java.util.Date中的时间取出来,转换为DateTime格式的字符串格式:YYYY-MM-DD HH:MM:SS * @param date * @param datePattern * @return */ public static String toDateTimeString(java.util.Date date, String datePattern){ if(date == null){ return ""; } SimpleDateFormat format; if(UtileProving.isEmail(datePattern)){ format = new SimpleDateFormat(defaultDateTimePattern); }else{ format = new SimpleDateFormat(datePattern); } return format.format(date); } public static String toDateTimeString(java.util.Date date){ return toDateTimeString(date, null); } public static String toDateTimeString(java.sql.Date date){ return toDateTimeString(date, null); } /** * 得到当前月的开始那天 * @return */ public static java.sql.Timestamp monthBegin(){ Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.AM_PM, Calendar.AM); return new Timestamp(calendar.getTime().getTime()); } /** * 在日期格式的字符串中获得月字符串 * @param date 日期格式字符串,格式:YYYY-MM-DD * @return */ public static String getMonth(String date){ if(UtileProving.isEmail(date)){ return ""; } int dateStr1 = date.indexOf(DateUtil.datePartition); int dateStr2 = date.lastIndexOf(DateUtil.datePartition); return date.substring(dateStr1 + 1, dateStr2); } public static String getMonth(java.sql.Date date) { String str = toDateTimeString(date); return getMonth(str); } public static String getMonth(java.util.Date date) { String str = toDateTimeString(date); return getMonth(str); } /** * 在日期格式字符串中获得年字符串 * @param date日期字符串,格式:YYYY-MM-DD * @return */ public static String getYear(String date){ if(UtileProving.isEmail(date)){ return ""; } int dateStr = date.indexOf(DateUtil.datePartition); return date.substring(0,dateStr); } public static String getYear(java.sql.Date date){ String str = toDateTimeString(date); return getYear(str); } public static String getYear(java.util.Date date) { String str = toDateTimeString(date); return getYear(str); } /** * 在日期格式字符串中获得日字符串 * @param date 日期字符串,格式:YYYY-MM-DD * @return */ public static String getDay(String date){ if(UtileProving.isEmail(date)){ return ""; } int dateStr = date.lastIndexOf(DateUtil.datePartition); int dateStr1 = (date.length() < (dateStr +3)) ? date.length() : dateStr + 3; return date.substring(dateStr + 1, dateStr1); } public static String getDay(java.sql.Date date) { String str = toDateTimeString(date); return getDay(str); } public static String getDay(java.util.Date date) { String str = toDateTimeString(date); return getDay(str); } /** * 在时间格式字符串中获得小时字符串 * @param date 时间格式字符串,格式:YYYY-MM-DD HH:MM:SS * @return */ public static String getHour(String date){ if(UtileProving.isEmail(date)){ return ""; } int dateSlash = date.indexOf(":"); int start = (dateSlash -2) < 0 ? dateSlash : dateSlash - 2; return date.substring(start, dateSlash).trim(); } public static String getHour(java.sql.Date date) { String str = toDateTimeString(date); return getHour(str); } public static String getHour(java.util.Date date) { String str = toDateTimeString(date); return getHour(str); } /** * 在时间格式字符串中获得分钟字符串 * * @param date日期格式的字符串,格式:YYYY-MM-DD HH:MM:SS * @return */ public static String getMinute(String date) { if (UtileProving.isEmpty(date)) return ""; int dateSlash1 = date.indexOf(":"); int dateSlash2 = date.lastIndexOf(":"); if (dateSlash1 == dateSlash2) return date.substring(dateSlash1 + 1, (date.length() < (dateSlash2 + 3)) ? date.length() : (dateSlash2 + 3)).trim(); return date.substring(dateSlash1 + 1, dateSlash2).trim(); } public static String getMinute(java.sql.Date date) { String str = toDateTimeString(date); return getMinute(str); } public static String getMinute(java.util.Date date) { String str = toDateTimeString(date); return getMinute(str); } /** * 在时间格式字符串中获得秒字符串 * @param date日期格式的字符串,格式:YYYY-MM-DD HH:MM:SS * @return */ public static String getSecond(String date) { if (UtileProving.isEmpty(date)) return ""; int dateSlash1 = date.indexOf(":"); int dateSlash2 = date.lastIndexOf(":"); if (dateSlash1 == dateSlash2) return "0"; return date.substring(dateSlash2 + 1, (date.length() < (dateSlash2 + 3)) ? date.length() : (dateSlash2 + 3)).trim(); } public static String getSecond(java.sql.Date date) { String str = toDateTimeString(date); return getSecond(str); } public static String getSecond(java.util.Date date) { String str = toDateTimeString(date); return getSecond(str); } /** * 获得星期1-7 * @param date * @return 字符串1,2,3,4,5,6,7 */ public static String getWeek(java.util.Date date){ if(date == null){ return ""; } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int week = calendar.get(Calendar.DAY_OF_WEEK) - 1; if(week == 0){ week = 7; } return String.valueOf(week); } /** * 获得星期1-7 * @param date * @return 字符串1,2,3,4,5,6,7 */ public static String getWeek(java.sql.Date date){ if(date == null){ return ""; } return getWeek(new java.util.Date(date.getTime())); } /** * 获得星期1-7 * @param date date 格式的字符串如:2013-03-06 * @return */ public static String getWeek(String date){ return getWeek(toSqlDate(date)); } /** * 获得当前星期1-7 * @return */ public static String getWeek(){ Calendar calendar = Calendar.getInstance(); int week = calendar.get(Calendar.DAY_OF_WEEK) - 1; if(week == 0){ week = 7; } return String.valueOf(week); } public static java.sql.Timestamp getTimestamp(long time){ return new java.sql.Timestamp(time); } /** * 将long格式时间转换为时间格式字符串 * @param time * @return */ public static String getTimeStr(long time){ return longToString(time); } /** * 处理格式为 Fri, 03 Apr 2009 02:28:31 GMT 的时间,注意如果GMT后有+{1}8:00 必须是标准的 * @param gmt * @return */ public static Date gmtStrToDate(String gmt){ SimpleDateFormat defaultDf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss z", Locale.US); try { return defaultDf.parse(gmt); } catch (Exception e) { throw new RuntimeException(e); } } // public static void main(String[] args) { // System.out.println(getDatStart(new Date(), 0)); // } }
最近下载更多