1. 程式人生 > >時間工具類java

時間工具類java

時間工具類

package com.newyulong.bcp.utils;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

import org.apache.commons.lang.StringUtils;

public class DateUtil {
	/**
	 * 日期格式化字串->全數字表示	yyyyMMddHHmmss
	 */
	public static final String TIME_FORMAT_DIGITAL = "yyyyMMddHHmmss";
	
	/**
	 * 日期格式化字串->全數字表示	yyyyMMdd
	 */
	public static final String TIME_FORMAT_DAY_1 = "yyyyMMdd";

	/**
	 * 日期格式化字串->	HH:mm
	 */
	public static final String TIME_FORMAT_HOUR = "yyyyMMddHHmmss";
	
	/**
	 * 日期格式化字串 到秒	yyyy-MM-dd HH:mm:ss
	 */
	public static final String TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
	
	/**
	 * 日期格式化字串 到天	yyyy-MM-dd
	 */
	public static final String TIME_FORMAT_DAY = "yyyy-MM-dd";
	
	/**
	 * 日期格式化字串 到毫秒	yyyy-MM-dd HH:mm:ss.SSS
	 */
	public static final String TIME_FORMAT_MSEL = "yyyy-MM-dd HH:mm:ss.SSS";
	
	/**
	 * oracle中日期格式化字串	yyyy-mm-dd hh24:mi:ss
	 */
	public static final String TIME_FORMAT_ORACLE = "yyyy-mm-dd hh24:mi:ss";
	/**
	 * oracle中日期格式化字串	HH:mm
	 */
	public static final String TIME_FORMAT_HHMM = "HH:mm";
	/**
	 * oracle中日期格式化字串	HH:mm
	 */
	public static final String TIME_FORMAT_HOUR_ONLY = "yyyy-MM-dd HH";
	/**
	 * 日期格式化字串 到月	yyyy-MM
	 */
	public static final String TIME_FORMAT_MONTH = "yyyy-MM";
	public static final String TIME_FORMAT_MONTH_MM_DD = "yyyy/MM/dd";
	/**
	 * 返回系統時間
	 *  
	 * @return long
	 * @author:lipeng
	 * @date:2012-12-6
	 */
	public static long getcurrentTime(){
		return System.currentTimeMillis();
	}
	/**
	 * 獲取伺服器當前日期
	 * @return
	 */
	public static Date getCurrentDate() {
		return new Date(System.currentTimeMillis());
	}
	
	/**
	 * 獲取伺服器當前時間的字串 ,格式 :yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static String getCurrentDateStr(){
		
		return convertDateToStr(getCurrentDate(), TIME_FORMAT);
	}
	/**
	 * 獲取當前時間到指定hour時間的字串
	 * @param hour		指定hour,-1指前一小時,+1指後一小時
	 * @return String
	 * @author:lipeng
	 * @date:2013-3-7
	 */
	public static String getCurrentToHour(int hour,String format){
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.HOUR, hour); // 得到提前hour小時
		Date oneHourBefore = calendar.getTime();
		return convertDateToStr(oneHourBefore,format);
	}
	/**
	 * 得到當天的23:59:59秒的指定格式的字串值
	 *  
	 * @param format
	 * @return String
	 * @author:lipeng
	 * @date:2013-1-16
	 */
	public static String getCurrentLastesStr(String format){
		Calendar cal = Calendar.getInstance();
		cal.setTime(getCurrentDate());
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		convertDateToStr(getCurrentDate(), format);
		cal.set(Calendar.HOUR_OF_DAY, 23);
		cal.set(Calendar.MINUTE, 59);
		cal.set(Calendar.SECOND, 59);
		return sdf.format(cal.getTime());
	}
	/**
	 * 獲取指定日期的23:59:59秒的指定格式的date
	 *  
	 * @param date
	 * @param format
	 * @return String
	 * @author:lipeng
	 * @date:2013-1-16
	 */
	public static Date getCurrentLastesStr(Date date){
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.HOUR_OF_DAY, 23);
		cal.set(Calendar.MINUTE, 59);
		cal.set(Calendar.SECOND, 59);
		return cal.getTime();
	}
	/**
	 * 獲取指定天數的2013-01-01 23:59:59秒的指定格式的date
	 */
	public static String getLastesDayStr(int date){
		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.DAY_OF_MONTH, date);
		cal.set(Calendar.HOUR_OF_DAY, 23);
		cal.set(Calendar.MINUTE, 59);
		cal.set(Calendar.SECOND, 59);
		// 獲取昨天的時間
		return convertDateToStr(cal.getTime(),TIME_FORMAT);
	}
	/**
	 * 獲取當天的零點的日期,00:00:01
	 *  
	 * @return Date
	 * @author:lipeng
	 * @date:2013-1-16
	 */
	public static String getCurrentFirstStr(String format){
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 1);
		cal.add(Calendar.DAY_OF_MONTH, 0);
		return sdf.format(cal.getTime());
	}
	/**
	 * 獲取伺服器當前時間的字串 ,格式:指定
	 *  
	 * @param format
	 * @return String
	 * @author:lipeng
	 * @date:2013-1-6
	 */
	public static String getCurrentDateStr(String format){
		
		return convertDateToStr(getCurrentDate(), format);
	}
	
	/**
	 * 增加天數
	 * @param date
	 * @param days
	 * @return
	 */
	public static Date addDate(Date date, int days) {
		if (date == null) return date;
		Locale loc = Locale.getDefault();
		GregorianCalendar cal = new GregorianCalendar(loc);
		cal.setTime(date);
		int day = cal.get(Calendar.DAY_OF_MONTH);
		int month = cal.get(Calendar.MONTH);
		int year = cal.get(Calendar.YEAR);
		cal.set(year, month, day + days);
		return cal.getTime();
	}
	/**
	 * 增加天/小時/分鐘/秒
	 *  
	 * @param date			時間
	 * @param days			天
	 * @param hours			小時
	 * @param mins			分鐘
	 * @param second		秒
	 * @return Date
	 * @author:lipeng
	 * @date:Dec 26, 2013
	 */
	public static Date addDate(Date date, int days,int hours,int mins,int second) {
		if (date == null) return date;
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.DAY_OF_MONTH, days);
		cal.add(Calendar.HOUR, hours);
		cal.add(Calendar.MINUTE, mins);
		cal.add(Calendar.SECOND, second);
		return cal.getTime();
	}
	/**
	 * 增加天/小時/分鐘/秒
	 *  
	 * @param date			時間
	 * @param days			天
	 * @param hours			小時
	 * @param mins			分鐘
	 * @param second		秒
	 * @return Date
	 * @author:lipeng
	 * @date:Dec 26, 2013
	 */
	public static Date addDate(String date, int days,int hours,int mins,int second) {
		if(StringUtils.isBlank(date)){
			throw new IllegalArgumentException("DateUtil.addDate()方法非法引數值:" + date);
		}
		Calendar cal = Calendar.getInstance();
		cal.setTime(convertStrToDate(date,TIME_FORMAT));
		cal.add(Calendar.DAY_OF_MONTH, days);
		cal.add(Calendar.HOUR, hours);
		cal.add(Calendar.MINUTE, mins);
		cal.add(Calendar.SECOND, second);
		return cal.getTime();
	}
	/**
	 * 獲取前幾天或後幾天的日期
	 *  
	 * @param days
	 * @return Date
	 * @author:lipeng
	 * @date:2013-1-16
	 */
	public static Date addDate(int days){
		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.DAY_OF_MONTH, days);
		return cal.getTime();
	}
	
	/**
	 * 獲取前一天所處的周的星期一
	 *  
	 * @return Date  幾天前或後的時間
	 * @author:lipeng
	 * @date:2013-3-12
	 */
	public static Date getWeekStar(int day){
		Calendar cal = new GregorianCalendar();  
		cal.add(Calendar.DAY_OF_WEEK, day);
		cal.setFirstDayOfWeek(Calendar.MONDAY);  
		cal.set(Calendar.HOUR_OF_DAY, 0);  
		cal.set(Calendar.MINUTE, 0);  
		cal.set(Calendar.SECOND, 0);  
		cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);  
		return cal.getTime();
	}
	/**
	 * 獲取前一天所處的周的星期天
	 *  
	 * @param day 幾天前或後的時間
	 * @return Date
	 * @author:lipeng
	 * @date:2013-3-12
	 */
	public static Date getWeekEnd(int day){
		Calendar cal = new GregorianCalendar(); 
		cal.add(Calendar.DAY_OF_WEEK, day);
		cal.setFirstDayOfWeek(Calendar.MONDAY);  
		cal.set(Calendar.HOUR_OF_DAY, 23);  
		cal.set(Calendar.MINUTE, 59);  
		cal.set(Calendar.SECOND, 59);  
		cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);  
		return cal.getTime();
	}
	/**
	 * 獲取指定日期所處的周的星期一
	 *  
	 * @return Date
	 * @author:lipeng
	 * @date:2013-3-12
	 */
	public static Date getWeekStar(int year,int month,int date){
		Calendar cal = new GregorianCalendar();  
		cal.set(year, month, date);
		cal.setFirstDayOfWeek(Calendar.MONDAY);  
		cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);  
		return cal.getTime();
	}
	/**
	 * 獲取指定日期所處的周的星期天
	 *  
	 * @param day
	 * @return Date
	 * @author:lipeng
	 * @date:2013-3-12
	 */
	public static Date getWeekEnd(int year,int month,int date){
		Calendar cal = new GregorianCalendar(); 
		cal.set(year, month, date);
		cal.setFirstDayOfWeek(Calendar.MONDAY);  
		cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);  
		return cal.getTime();
	}
	/**
	 * 獲取前一天所處的月頭
	 *  
	 * @param day
	 * @return Date
	 * @author:lipeng
	 * @date:2013-3-12
	 */
	public static Date getMonthStar(int month){
		Calendar cal = new GregorianCalendar(); 
		cal.add(Calendar.MONTH, month);
		cal.set(Calendar.DAY_OF_MONTH, 1);  
		cal.set(Calendar.HOUR_OF_DAY, 0);  
		cal.set(Calendar.MINUTE, 0);  
		cal.set(Calendar.SECOND, 0);  
		return cal.getTime();
	}
	/**
	 * 獲取前一天所處的月尾
	 *  
	 * @param day
	 * @return Date
	 * @author:lipeng
	 * @date:2013-3-12
	 */
	public static Date getMonthEnd(int month){
		Calendar cal = new GregorianCalendar(); 
		cal.add(Calendar.MONTH, 1 + month);
		cal.set(Calendar.DAY_OF_MONTH, 0); 
		cal.set(Calendar.HOUR_OF_DAY, 23);  
		cal.set(Calendar.MINUTE, 59);  
		cal.set(Calendar.SECOND, 59);  
		return cal.getTime();
	}
	
	/**
	 * 將字串轉換為日期格式 
	 * @param dateStr
	 * @param dateFormat
	 * @return
	 */
	public static Date convertStrToDate(String dateStr, String dateFormat) {
		if (dateStr == null || dateStr.equals("")) {
			return null;
		}
		SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
		try {
			return sdf.parse(dateStr);
		}
		catch (Exception e) {
			throw new RuntimeException("DateUtil.convertStrToDate():" + e.getMessage());
		}
	}
	
	/**
	 * 將日期轉換為字串格式
	 * @param date
	 * @param dateFormat
	 * @return
	 */
	public static String convertDateToStr(Date date, String dateFormat) {
		if (date == null) {
			return null;
		}
		SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
		return sdf.format(date);
	}
	
	/**
	 * 給一日期增加一時間
	 * @param timePart HH,mm,ss 
	 * @param number 要增加的時間
	 * @param date 日期物件
	 * @return
	 */
	public static Date addTime(String timePart, int number, Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		if (timePart.equals("HH")) {
			cal.add(Calendar.HOUR, number);
		}
		else if (timePart.equals("mm")) {
			cal.add(Calendar.MINUTE, number);
		}
		else if (timePart.equals("ss")) {
			cal.add(Calendar.SECOND, number);
		}
		else {
			throw new IllegalArgumentException("DateUtil.addDate()方法非法引數值:" + timePart);
		}
		return cal.getTime();
	}
	
	/**
	 * 
	 * 清除指定的時間
	 * @param date
	 * @param timePart HH,mm,ss 
	 * @return
	 */
	public static Date clearTime(Date date,String timePart){
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		if (timePart.equals("HH")) {
			cal.clear(Calendar.HOUR);
		}
		else if (timePart.equals("mm")) {
			cal.clear(Calendar.MINUTE);
		}
		else if (timePart.equals("ss")) {
			cal.clear(Calendar.SECOND);
		}
		else {
			throw new IllegalArgumentException("DateUtil.addDate()方法非法引數值:" + timePart);
		}
		return cal.getTime();
	}
	/**
	 * 計算間隔時間
	 *  
	 * @param currTime
	 * @param lastestTime
	 * @return String
	 * @author:lipeng
	 * @date:2013-4-27
	 */
	public static String getTimeSpace(String currTime,String lastestTime){
		Long d = convertStrToDate(currTime, TIME_FORMAT).getTime();
		Long d2 = convertStrToDate(lastestTime, TIME_FORMAT).getTime();
		return String.valueOf((d - d2)/1000);
	}
	/**
	 * 比較時間大小
	 *  
	 * @param a				時間字串
	 * @param b				時間字串
	 * @param timeFormat	時間字串格式
	 * @return int			a > b 返回'-1',a = b 返回'0',a < b返回'1'
	 * @author:lipeng
	 * @date:Mar 27, 2014
	 */
	public static int compareTo(String a,String b,String timeFormat){
		long c = DateUtil.convertStrToDate(a, timeFormat).getTime();
		long d = DateUtil.convertStrToDate(b, timeFormat).getTime();
		if(c > d){
			return -1;
		}else if(c == d){
			return 0;
		}else{
			return 1;
		}
	}
	
	
	/**
	 * 計算當前月的第一天
	 *  
	 * @return String
	 * @author:
	 * @date:2013-4-27
	 */
	public static String getBeginTime()
	{
		SimpleDateFormat datef=new SimpleDateFormat(TIME_FORMAT);
		Calendar cal = Calendar.getInstance();
        //當前月的第一天          
        cal.set(GregorianCalendar.DAY_OF_MONTH, 1); 
        Date beginTime=cal.getTime();
       return datef.format(beginTime);
	}
	
	
	/**
	 * 計算當前月的最後一天
	 *  
	 * @return String
	 * @author:
	 * @date:2013-4-27
	 */
	public static String getEndTime()
	{
		Calendar cal = Calendar.getInstance(); 
		SimpleDateFormat datef=new SimpleDateFormat(TIME_FORMAT);
	     //當前月的最後一天   
	     cal.set( Calendar.DATE, 1 );
	     cal.roll(Calendar.DATE, - 1 );
	     Date endTime=cal.getTime();
	     return datef.format(endTime);
	}
	
	/**
	 * 計算某年某月的最後一天
	 *  
	 * @return String
	 * @author:
	 * @date:2013-4-27
	 */
	
    public static String getLastDayOfMonth(int year, int month) {     
        Calendar cal = Calendar.getInstance();     
        cal.set(Calendar.YEAR, year);     
        cal.set(Calendar.MONTH, month-1);     
        cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DATE));  
       return  new   SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime());  
    } 
    
	/**
	 * 計算某年某月的第一天
	 *  
	 * @return String
	 * @author:
	 * @date:2013-4-27
	 */
    public static String getFirstDayOfMonth(int year, int month) {     
        Calendar cal = Calendar.getInstance();     
        cal.set(Calendar.YEAR, year);     
        cal.set(Calendar.MONTH, month-1);  
        cal.set(Calendar.DAY_OF_MONTH,cal.getMinimum(Calendar.DATE));  
       return   new   SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime());  
    }
    
	/**
	 * 判斷輸入是否為合法的日期格式
	 *  
	 * @return String
	 * @author:
	 * @date:2013-4-27
	 */
    public static boolean isDate(String str, String dateFormat) {
        if (str != null) {
          java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat(dateFormat);
          formatter.setLenient(false);
        
             try {
                 formatter.format(formatter.parse(str));
               }catch (Exception e) {
                 return false;
               }
               return true;
             }
             return false;
   }
    /**
     * 獲取百度網站的北京時間
     *  
     * @return 
     * @author:Administrator 
     * @date:2014年7月8日
     */
    public static long getTime() {
        long time = 0;
        String urls = "http://open.baidu.com/special/time/";
        try {
            URL url = new URL(urls);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.connect();
            InputStream is = con.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String line;
            int index = 0;
            while ((line = br.readLine()) != null) {
                index++;
                if (index < 123)
                    continue;
                if (line.indexOf("window.baidu_time(") != -1) {
                    String[] s = line.split("\\(");
                    time = Long.parseLong(s[1].substring(0, s[1].length() - 2));
                    break;
                }
            }
            con.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return time;
    }
    
    /**
     * 獲取某一日期前幾月和後幾月
     *  
     * @param date
     * @param amount
     * @return 
     * @author:zhengjk 
     * @date:2014-12-4
     */
    public static Date addMonth(Date date, int amount){
    	Calendar c = Calendar.getInstance();
    	c.setTime(date);
    	c.add(Calendar.MONTH, amount);
    	return c.getTime();
    }
    
    
    public static String getCurrentMouth()
    {
    	 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); 
    	Calendar c = Calendar.getInstance();   
        c.add(Calendar.MONTH, 0);
        c.set(Calendar.DAY_OF_MONTH,1);//設定為1號,當前日期既為本月第一天
        String date = format.format(c.getTime());
        return date;
    }
    
    
    /**
     * 獲取某一日期前幾月和後幾月
     *  
     * @param date
     * @param amount
     * @return 
     * @author:lipeng
     * @date:2015年1月26日
     */
    public static String cutMonth(Date date, int amount,String dateFormat){
    	return convertDateToStr(addMonth(date, amount),dateFormat);
    }
    
    
    public static String timeStamp2Date(String timestampString, String formats){    
    	  Long timestamp = Long.parseLong(timestampString)*1000;    
    	  String date = new java.text.SimpleDateFormat(formats).format(new java.util.Date(timestamp));    
    	  return date;    
    	} 
    
	public static void main(String[] args){
//		//上週一   Wed Jul 29 2015 15:25:23 GMT 0800
//		System.out.println(DateUtil.convertDateToStr(getWeekStar(-3), TIME_FORMAT));
//		//上週日
//		System.out.println(DateUtil.convertDateToStr(getWeekEnd(-3), TIME_FORMAT));
//	      // 3.當前月的第一天  
//        System.out.println("當前月的第一天:" + convertDateToStr(getMonthStar(35),TIME_FORMAT));  
//        // 4.當前月的最後一天  
//        System.out.println("當前月的最後一天:" + convertDateToStr(getMonthEnd(35),TIME_FORMAT));  
//        System.out.println("獲取前2天的時間:" + getLastesDayStr(-2));
//        System.out.println(24*60*60*1000);
//		System.out.println(convertDateToStr(new Date(1437619600), TIME_FORMAT));
//		System.out.println(convertDateToStr(new Date(1437724064), TIME_FORMAT));
		System.out.println(timeStamp2Date("1437558729",TIME_FORMAT));
/*		Date d = convertStrToDate("2013-04-17 00:00:01", TIME_FORMAT);
		System.out.println(d.getTime());
		Date d2 = convertStrToDate("Wed Jul 29 2015 15:25:23 GMT+08:00", TIME_FORMAT);
		System.out.println(d2.getTime());*/
//		System.out.println(d.getTime());
//		List<String> list = new ArrayList();
//		for (int i = 1; i < 5000; i++) {
//			list.add(convertDateToStr(new Date(1366190471000L - i*38*1000), TIME_FORMAT));
//		}
		
//		for (int i = 1; i < 8; i++) {
//			Date d = convertStrToDate("2013-06-" + i, TIME_FORMAT_DAY);
//			System.out.println((d.getTime() ));
//		}
//		System.out.println(getcurrentTime());
//		String time = DateUtil.convertDateToStr(DateUtil.addDate(-2),DateUtil.TIME_FORMAT_DAY);
//		System.out.println(time);
//		System.out.println(convertDateToStr(getWeekStar(2013,4,3),TIME_FORMAT_DAY));
//		System.out.println(convertDateToStr(getWeekEnd(2013,5,3),TIME_FORMAT_DAY));
//		System.out.println(convertDateToStr(getMonthStar(0),TIME_FORMAT_DAY));
//		System.out.println(getTimeSpace("2014-03-05 12:05:00","2014-03-05 12:01:00"));
//		System.out.println(getCurrentLastesStr(DateUtil.TIME_FORMAT));
//		System.out.println(convertDateToStr(new Date(1404787254578L),TIME_FORMAT));
//		System.out.println(convertDateToStr(addMonth(new Date(),2), "yyyyMM"));
//		System.out.println(convertDateToStr(addMonth(new Date(), -5),TIME_FORMAT_MONTH));
//		System.out.println(cutMonth(convertStrToDate("2015-03-18 16:56:00", DateUtil.TIME_FORMAT), -6,DateUtil.TIME_FORMAT));
	}
}