现在的位置: 首页 > 综合 > 正文

java时间工具类

2013年12月05日 ⁄ 综合 ⁄ 共 6871字 ⁄ 字号 评论关闭
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; // 无法解析输入时间
	}
	

}

抱歉!评论已关闭.