package com.appbox.util.time; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.regex.Pattern; import org.apache.log4j.Logger; public class DateTimeUtil { private static Logger log = Logger.getLogger(DateTimeUtil.class); /** * * @return 当前日期和时间 格式:20110101121212000 */ public static String getTimeStampStr() { return getDateTime("yyyyMMddHHmmssSSS"); } /** * * @return 当前日期和时间 格式:2011-01-01 12:12:12 */ public static String getCurrentDateAndTime() { return getDateTime("yyyy-MM-dd HH:mm:ss"); } /** * * @return 获取当前日期 格式:2011-01-01 */ public static String getCurrentDate() { return getDateTime("yyyy-MM-dd"); } /** * * @return 获取当前时间 格式 12:12:12 */ public static String getCurrentTime() { String date = getDateTime("HH:mm:ss"); return date; } /** * * @return 获取当前时间戳 */ public static long getTimestamp() { Date dateNow = new Date(); return dateNow.getTime(); } /** * 将时间的string转换为Date类型 * @param str 例2011-01-01 12:12:12 * @return 时间类型对象 */ public static Date StringToDate(String str){ DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = null; try { date = format1.parse(str); } catch (ParseException e) { log.error("string 转换date:"+e.getMessage()); e.printStackTrace(); } return date; } public static String getDateTime(String pattern) { if (null == pattern || "".equals(pattern)) { pattern = "yyyy-MM-dd HH:mm:ss"; } SimpleDateFormat sdf = new SimpleDateFormat(pattern); String dt = sdf.format(new Date()); return dt; } /** * 将时间的Date转换为String类型 * @param date * @param pattern 指定返回的日期字符串的格式 ,如果没有指定则默认为"yyyy-MM-dd HH:mm:ss" * @return String 返回为指定pattern格式的字符串 * @exception NullPointerException - 如果给定的模式为 null * @exception IllegalArgumentException - 如果给定的模式无效 */ public static String dateToString(Date date,String ...pattern){ String pattern2="yyyy-MM-dd HH:mm:ss"; if(pattern.length>0){ pattern2=pattern[0]; } DateFormat format1 = new SimpleDateFormat(pattern2); return format1.format(date); } /** * 生成日期列表,包含开始日期和结束日期 * @param start 开始日期 * @param end 结束日期 * @param pattern 指定返回的日期的格式 ,如果未指定则默认为"yyyy-MM-dd" * @return 包含开始日期和结束日期的日期列表,包含开始日期和结束日期,返回的日期格式为指定的pattern */ @SuppressWarnings("deprecation") public static List<String> getDateList(Date start,Date end,String ...pattern){ List<String> ret=new ArrayList<String>(); String pattern2="yyyy-MM-dd"; if(pattern.length>0){ pattern2=pattern[0]; } while(start.compareTo(end)<=0){ ret.add(dateToString(start,pattern2)); start.setDate(start.getDate()+1); } return ret; } /** * 将时间的string转换为Date类型,注意本类中的另一个方法与此方法首字母的不同 * @param datestr 例2011-01-01 12:12:12 * @param pattern 指定转换的格式,如果不存在,则默认为yyyy-MM-dd HH:mm:ss * @return 时间类型对象 */ public static Date stringToDate(String datestr,String ...pattern){ String pattern2="yyyy-MM-dd HH:mm:ss"; if(pattern.length>0){ pattern2=pattern[0]; } DateFormat format1 = new SimpleDateFormat(pattern2); Date date = null; try { date = format1.parse(datestr); } catch (ParseException e) { log.error("string 转换date:"+e.getMessage()); e.printStackTrace(); } return date; } /** * 获取上个月的今天 * @return 当前日期和时间 格式:2011-01-01 12:12:12 */ public static String getLastMonthDateAndTime() { String year = getDateTime("yyyy"); String month = getDateTime("MM"); if(Integer.parseInt(month) > 1){ month = String.valueOf((Integer.parseInt(month)-1)); if(month.length() == 1){ month = "0" + month; } }else{ month = "12"; year = String.valueOf(Integer.parseInt(year)-1); } String time = getDateTime("-dd HH:mm:ss"); time = year + "-" + month + time; return time; } /** * 根据当前时间生成流水号 * @param prefix 例"R" * @return 当前日期和时间 格式:2011-01-01 12:12:12 */ public static String getSwiftnumber(String prefix) { String swiftnumber = prefix; String date = getCurrentDate(); String[] temp = date.split("-"); swiftnumber += (temp[0] + temp[1] + temp[2]); return swiftnumber; } public static boolean timeMatch(String startdate){ String datereg="(([\\d]{2}(([02468][048])|[13579][26])\\-"// 闰年 + "((((0[13578])|(1[02]))\\-(([012][\\d])|(3[01])))" + "|(((0[469])|(11))\\-(([012][\\d])|30))" + "|(02\\-[012][\\d])))" // 月日 + "|([\\d]{2}(([02468][^0^4^8])|([13579][^2^6]))\\-"// 非闰年 + "((((0[13578])|(1[02]))\\-(([012][\\d])|(3[01])))" + "|(((0[469])|(11))\\-(([012][\\d])|30))" + "|(02\\-(([01][\\d])|(2[0-8]))))))"; return Pattern.matches(datereg, startdate); } public static String getDateByYearlimited(Integer limitedyear) { String year = getDateTime("yyyy"); year = String.valueOf((Integer.parseInt(year) + limitedyear)); String date = getDateTime("-mm-dd"); return year + date; } public static String getTomorrow() { String year = getDateTime("yyyy"); String month = getDateTime("MM"); String day = getDateTime("dd"); if("01".equals(month) || "03".equals(month) || "05".equals(month) || "07".equals(month) || "08".equals(month) || "10".equals(month)){ if(Integer.parseInt(day) >= 31){ month = String.valueOf(Integer.parseInt(month) + 1) ; if(month.length() == 1){ month = "0" + month; } day = "01"; }else{ day = String.valueOf(Integer.parseInt(day) + 1); if(day.length() == 1){ day = "0" + day; } } }else if("04".equals(month) || "06".equals(month) || "09".equals(month) || "11".equals(month)){ if(Integer.parseInt(day) >= 30){ month = String.valueOf(Integer.parseInt(month) + 1) ; if(month.length() == 1){ month = "0" + month; } day = "01"; }else{ day = String.valueOf(Integer.parseInt(day) + 1); if(day.length() == 1){ day = "0" + day; } } }else if("02".equals(month)){ int intyear = Integer.parseInt(year); if((intyear % 4 == 0) && (intyear % 100 != 0)||(intyear % 400==0)){ if(Integer.parseInt(day) >= 29){ month = String.valueOf(Integer.parseInt(month) + 1) ; if(month.length() == 1){ month = "0" + month; } day = "01"; }else{ day = String.valueOf(Integer.parseInt(day) + 1); if(day.length() == 1){ day = "0" + day; } } }else{ if(Integer.parseInt(day) >= 28){ month = String.valueOf(Integer.parseInt(month) + 1) ; if(month.length() == 1){ month = "0" + month; } day = "01"; }else{ day = String.valueOf(Integer.parseInt(day) + 1); if(day.length() == 1){ day = "0" + day; } } } }else if("12".equals(month)){ if(Integer.parseInt(day) >= 31){ year = String.valueOf(Integer.parseInt(year) + 1) ; month = "01"; day = "01"; }else{ day = String.valueOf(Integer.parseInt(day) + 1); if(day.length() == 1){ day = "0" + day; } } } String time = getDateTime(" HH:mm:ss"); time = year + "-" + month + "-" + day + time; return time; } /** * 获得过去几天前或几天后的日期 * @param days 负为几天前, 正为几天后 * @return */ public static String getNextDay(Long days) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String dt = sdf.format(new Date(new Date().getTime()+days*1000*3600*24)); return dt; } public static String getLastDay() { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String dt = sdf.format(new Date(new Date().getTime()-1000*3600*24)); return dt; } public static String getNextDay() { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String dt = sdf.format(new Date(new Date().getTime() + 1000*3600*24)); return dt; } public static Boolean checktime(String time){ if(getTimestamp() - StringToDate(time).getTime() <= 600000 && getTimestamp() - StringToDate(time).getTime() >= -600000){ return true; } return false; } /** * 按日历算日期(明天或者昨天) * * @param date * @param field * @param amount * @see Calendar#add(int, int) * @return */ public static String dateWalker(String date, int field, int amount) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); try { cal.setTime(sdf.parse(date)); cal.add(field, amount); String target = sdf.format(cal.getTime()); return target; } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; // 无法解析输入时间 } }