Date util

/**
 * DateUtils.java
 */
package com.aspire.common.util;

import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

/**
 * <p>
 * Title: 日期操作类
 * </p>
 * <p>
 * Description: 完成一些对日期的计算工作
 * </p>
 * <p>
 * Copyright: Copyright (c) 2007
 * </p>
 * <p>
 * Company: aspire technology
 * </p>
 * 
 * @author zengjin
 * @version 1.0.0.0
 * @CheckItem@ NEW-zengjin-20070110-patch001-ADD40 新增
 */
public class DateUtils {

	/**
	 * 显示日期的格式,yyyy-MM-dd
	 */
	public static final String DATE_FORMAT = "yyyy-MM-dd";

	/**
	 * 显示日期的格式,yyyy-MM-dd HH:mm:ss
	 */
	public static final String TIMEF_FORMAT = "yyyy-MM-dd HH:mm:ss";

	/**
	 * 显示日期的格式,yyyy年MM月dd日HH时mm分ss秒
	 */
	public static final String ZHCN_TIME_FORMAT = "yyyy年MM月dd日HH时mm分ss秒";

	/**
	 * 显示日期的格式,yyyyMMddHHmmss
	 */
	public static final String TIME_STR_FORMAT = "yyyyMMddHHmmss";

	/**
	 * 显示日期的格式,yyyyMMdd
	 */
	public static final String DATE_STR_FORMAT = "yyyyMMdd";
    
    /**
     * 显示日期的格式,yyyyMMdd
     */
    public static final String DATE_HH_STR_FORMAT = "yyyy-MM-dd-HH";
    
    public static final String DATE_HH_STR_SSS_FORMAT = "yyyy/MM/dd HH:mm:ss:SSS";
    

	/**
	 * DateFormat,格式:yyyy-MM-dd
	 */
	private static DateFormat dateFormat;

	/**
	 * DateFormat,格式:yyyy-MM-dd HH:mm:ss
	 */
	private static DateFormat dateTimeFormat;

	/**
	 * DateFormat,格式:yyyyMMddHHmmss
	 */
	private static DateFormat dateTimeStrFormat;

	/**
	 * DateFormat,格式:yyyy年MM月dd日HH时mm分ss秒
	 */
	private static DateFormat zhcnDateTimeStrFormat;

	static {
		dateFormat = new SimpleDateFormat(DATE_FORMAT);
		dateTimeFormat = new SimpleDateFormat(TIMEF_FORMAT);
		dateTimeStrFormat = new SimpleDateFormat(TIME_STR_FORMAT);
		zhcnDateTimeStrFormat = new SimpleDateFormat(ZHCN_TIME_FORMAT);
	}

	/**
	 * 获取当前时间在+-n分钟后的字符串时间
	 * 
	 * @param n
	 *            int
	 * @return String
	 */
	public static String getTimebyMinAfter(int n) {
		Calendar now = Calendar.getInstance(TimeZone.getDefault());
		now.add(Calendar.MINUTE, n);
		return (dateTimeFormat.format(now.getTime()));
	}

	/**
	 * 获取当前时间在+-n秒后的字符串时间
	 * 
	 * @param n
	 *            int
	 * @return String
	 */
	public static String getTimebySecAfter(int n) {
		Calendar now = Calendar.getInstance(TimeZone.getDefault());
		now.add(Calendar.SECOND, n);
		return (dateTimeFormat.format(now.getTime()));
	}

	/**
	 * 获取定义的DateFormat格式
	 * 
	 * @param formatStr
	 * @return
	 */
	private static DateFormat getDateFormat(String formatStr) {
		if (formatStr.equalsIgnoreCase(DATE_FORMAT)) {
			return dateFormat;
		} else if (formatStr.equalsIgnoreCase(TIMEF_FORMAT)) {
			return dateTimeFormat;
		} else {
			return new SimpleDateFormat(formatStr);
		}
	}

	/**
	 * 将Date转换成字符串“yyyy-mm-dd hh:mm:ss”的字符串
	 * 
	 * @param date
	 *            日期
	 * @return String 字符串
	 */
	public static String dateToDateString(Date date) {
		return dateToDateString(date, TIMEF_FORMAT);
	}

	/**
	 * 将Date转换成formatStr格式的字符串
	 * 
	 * @param date
	 * @param formatStr
	 * @return
	 */
	public static String dateToDateString(Date date, String formatStr) {
		DateFormat df = getDateFormat(formatStr);
		return df.format(date);
	}

	/**
	 * 将小时数换算成返回以毫秒为单位的时间
	 * 
	 * @param hours
	 * @return
	 */
	public static long getMicroSec(BigDecimal hours) {
		BigDecimal bd;
		bd = hours.multiply(new BigDecimal(3600 * 1000));
		return bd.longValue();
	}

	/**
	 * 获取今天的日期,格式自定
	 * 
	 * @param pattern -
	 *            设定显示格式
	 * @return String - 返回今天的日期
	 */
	public static String getToday(String pattern) {
		Calendar now = Calendar.getInstance(TimeZone.getDefault());
		DateFormat sdf = getDateFormat(pattern);
		sdf.setTimeZone(TimeZone.getDefault());
		return (sdf.format(now.getTime()));
	}

	// 得到系统当前的分钟数,如当前时间是上午12:00,系统当前的分钟数就是12*60
	public static int getCurrentMinutes() {
		Calendar now = Calendar.getInstance(TimeZone.getDefault());
		int iMin = now.get(Calendar.HOUR_OF_DAY) * 60
				+ now.get(Calendar.MINUTE);
		return iMin;
	}

	/**
	 * 获取当前日期时间yyyy年MM月dd日HH时mm分ss秒的形式
	 * 
	 * @return 当前日期时间yyyy年MM月dd日HH时mm分ss秒的形式
	 */
	public static String getCurZhCNDateTime() {
		return dateToDateString(new Date(), ZHCN_TIME_FORMAT);
	}
	/**
	 * 获取当前时间 yyyyMMddHHmmss 的格式
	 * */
	public static String getCurTime24(){
		return dateToDateString(new Date(),TIME_STR_FORMAT);
	}
	/**
	 * @return 得到本月月份 如09
	 */
	public static String getMonth() {
		Calendar now = Calendar.getInstance();
		int month = now.get(Calendar.MONTH) + 1;
		String monStr = String.valueOf(month);

		// 对于10月份以下的月份,加"0"在前面
		if (month < 10)
			monStr = "0" + monStr;
		return monStr;
	}

	/**
	 * 根据失效时间判断是否依然有效
	 * 
	 * @param expireTime
	 *            失效时间的字符串形式,格式要求:yyMMddHHmmss
	 * @return true:失效 false:没有失效
	 * @throws ParseException
	 */
	public static boolean isTimeExpired(String expireTime)
			throws ParseException {
		boolean ret = false;

		// SimpleDateFormat不是线程安全的,所以每次调用new一个新的对象
		Date date = new SimpleDateFormat(TIME_STR_FORMAT).parse(expireTime);
		Calendar expire = Calendar.getInstance();
		expire.setTime(date);
		Calendar now = Calendar.getInstance();
		// 将毫秒字段设为0,保持精度一致性
		now.set(Calendar.MILLISECOND, 0);
		if (now.after(expire)) {
			ret = true;
		}
		return ret;
	}

	/**
	 * 根据开始时间和可用时间计算出失效时间
	 * 
	 * @param startTime
	 *            开始时间
	 * @param availableTime
	 *            有效时长(单位:秒)
	 * @return 失效时间
	 * @throws ParseException
	 */
	public static String getExpireTimeByCalculate(Date startTime,
			int availableTime) {

		Calendar expire = Calendar.getInstance();

		// 设置为开始时间
		expire.setTime(startTime);

		// 开始时间向后有效时长秒得到失效时间
		expire.add(Calendar.SECOND, availableTime);

		// 返回失效时间字符串
		// SimpleDateFormat不是线程安全的,所以每次调用new一个新的对象
		return new SimpleDateFormat(TIME_STR_FORMAT).format(expire.getTime());

	}

	/**
	 * 将Date转换为yyMMddHHmmss的形式
	 * 
	 * @param date
	 * @return 日期的字符串形式,格式:yyMMddHHmmss
	 */
	public static String convertDateToString(Date date) {
		return new SimpleDateFormat(TIME_STR_FORMAT).format(date);
	}

	/**
	 * 将yyMMddHHmmss形式的字符串转换成Date的形式
	 * 
	 * @param date
	 *            yyMMddHHmmss形式的日期字符串
	 * @return Date对象
	 * @throws ParseException
	 */
	public static Date convertStringToDate(String date) throws ParseException {
		return new SimpleDateFormat(TIME_STR_FORMAT).parse(date);
	}

	/**
	 * @param date
	 *            yyyyMMddHHmmss格式的日期字符转换为yyyy年MM月dd日HH时mm分ss秒格式的字符串
	 * @return yyyy年MM月dd日HH时mm分ss秒格式的日期字符串
	 * @throws ParseException
	 */
	public static String convertStringToZhCN(String date) throws ParseException {
		return zhcnDateTimeStrFormat.format(dateTimeStrFormat.parse(date));
	}

	// ### add by xukejun on v1.5.0.0.006 start ###
	/**
	 * 获取昨日日期 返回格式:yyyy-MM-dd
	 */
	public static String getYesterdayDate() {
		// 获取昨日的日期
		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.DAY_OF_MONTH, -1);
		Date yesterday = cal.getTime();
		return new SimpleDateFormat(DATE_FORMAT).format(yesterday);
	}
	// ### add by xukejun on v1.5.0.0.006 end ###

    
    /**
     * @param dateString yyyy/MM/dd HH:mm:ss
     * @return
     * @throws ParseException
     */
    public static  String convertStringToString(String dateString) throws ParseException{
        
         SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
         Date  date = sdf.parse(dateString);      
        return convertDateToString(date);
  
    }
    
    
    /**
     * 将yyMMddHHmmss形式的字符串转换成Date的形式
     * 
     * @param date
     *            yyMMddHHmmss形式的日期字符串
     * @return Date对象
     * @throws ParseException
     */
    public static Date convertStringToDate(String date,String formatString) throws ParseException {
        return new SimpleDateFormat(formatString).parse(date);
    }
    
     /** 
       * 获得延迟后的日期 
       * @param src(基于日期)
       * @param count(延迟数)
       * @param type(延迟类型:Y--年;M--月;D--天;H--小时)
       * @return
       * @author x_shengqiang
       * @date 2010-1-4
     */
    public static Date getDelayDate(Date src,int count,String type)throws ParseException{
    	Calendar cal=Calendar.getInstance();
    	cal.setTime(src);
    	if("Y".equals(type)){
    	    cal.add(Calendar.YEAR, count);
    	}else if("M".equals(type)){
    		cal.add(Calendar.MONTH, count);	
    	}else if("D".equals(type)){
    		cal.add(Calendar.DATE, count);
    	}else if("H".equals(type)){
    		cal.add(Calendar.HOUR, count);
    	}
    	return new SimpleDateFormat(DATE_FORMAT).parse((new SimpleDateFormat(DATE_FORMAT).format(cal.getTime())));
    }
     /** 
       * 获取月份第一天 
       * @param src
       * @return
       * @author x_shengqiang
       * @date 2010-1-4
     */
    public static Date getMonthFirstDate(Date src)throws ParseException{
    	Calendar cal=Calendar.getInstance();
    	cal.setTime(src);
    	cal.set(Calendar.DATE, 1);
    	return new SimpleDateFormat(DATE_FORMAT).parse((new SimpleDateFormat(DATE_FORMAT).format(cal.getTime())));
    }
    /** 
     * 获取月份最后一天 
     * @param src
     * @return
     * @author x_shengqiang
     * @date 2010-1-4
   */
    public static Date getLastDayOfMonth(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        cal.roll(Calendar.DAY_OF_MONTH, -1);
        return cal.getTime();
    } 
     /** 
       * 获得yyyy-MM-dd格式的日期 
       * @param src
       * @param pattern
       * @return
       * @author x_shengqiang
       * @date 2010-1-5
     */
    public static Date getPatternDate(String src)throws ParseException{
    	return new SimpleDateFormat(DATE_FORMAT).parse(src);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值