java宝典之时间date工具类

package com.ouyeel.util;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;

import org.joda.time.field.StrictDateTimeField;

/**
 * 日期操作工具类
 * 
 * @author luzh
 * 
 */
public class DateUtil {
	/**
	 * 默认日期格式:yyyy-MM-dd
	 */
	public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";

	/**
	 * 默认时间格式:yyyy-MM-dd HH:mm:ss
	 */
	public static final String DEFAULT_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";

	/**
	 * 默认时间戳格式,到毫秒 yyyy-MM-dd HH:mm:ss SSS
	 */
	public static final String DEFAULT_DATEDETAIL_PATTERN = "yyyy-MM-dd HH:mm:ss SSS";

	public static final String YEAR_APRIL_DAY_BRANCHSECONDS = "yyyyMMddHHmmss";

	public static final String CURRENT_TIME_MILLIS = "yyyyMMddHHmmssSSS";

	/**
	 * 1天折算成毫秒数
	 */
	public static final long MILLIS_A_DAY = 24 * 3600 * 1000;

	private static HashMap parsers = new HashMap();

	private static SimpleDateFormat getDateParser(String pattern) {
		Object parser = parsers.get(pattern);
		if (parser == null) {
			parser = new SimpleDateFormat(pattern);
			parsers.put(pattern, parser);
		}
		return (SimpleDateFormat) parser;
	}

	/**
	 * 取得当前系统日期
	 * 
	 * @return
	 */
	public static java.util.Date currentDate() {
		return new java.util.Date();
	}

	/**
	 * 取得系统当前日期,返回默认日期格式的字符串。
	 * 
	 * @param strFormat
	 * @return
	 */
	public static String nowDate(String strFormat) {
		java.util.Date date = new java.util.Date();
		return getDateParser(strFormat).format(date);
	}

	/**
	 * 取得当前系统时间戳
	 * 
	 * @return
	 */
	public static Timestamp currentTimestamp() {
		return new Timestamp(new Date().getTime());
	}

	/**
	 * 取得时间戳
	 * 
	 * @return
	 */
	public static Timestamp getTimestamp(Date date) {
		return new Timestamp(date.getTime());
	}

	/**
	 * 将日期字符串转换为java.util.Date对象
	 * 
	 * @param dateString
	 * @param pattern
	 *            日期格式
	 * @return
	 * @throws Exception
	 */
	public static java.util.Date toDate(String dateString, String pattern) throws Exception {
		return getDateParser(pattern).parse(dateString);
	}

	/**
	 * 将日期字符串转换为java.util.Date对象,使用默认日期格式
	 * 
	 * @param dateString
	 * @return
	 * @throws Exception
	 */
	public static java.util.Date toDate(String dateString) throws Exception {
		return getDateParser(DEFAULT_DATE_PATTERN).parse(dateString);
	}

	/**
	 * 将时间字符串转换为java.util.Date对象
	 * 
	 * @param dateString
	 * @return
	 * @throws Exception
	 */
	public static java.util.Date toDateTime(String dateString) throws Exception {
		return getDateParser(DEFAULT_DATETIME_PATTERN).parse(dateString);
	}

	/**
	 * 获取年月日时分秒yyyyMMddHHmmss
	 * 
	 * @return
	 */
	public static String toDateTimeStr() {
		SimpleDateFormat sdf = new SimpleDateFormat(YEAR_APRIL_DAY_BRANCHSECONDS);
		return sdf.format(System.currentTimeMillis());
	}

	/**
	 * 根据格式返回string格式日期
	 * 
	 * @param dateFormat
	 * @return
	 */
	public static String toDateTimeStr(String dateFormat) {
		SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
		return sdf.format(System.currentTimeMillis());
	}

	/**
	 * 将java.util.Date对象转换为字符串
	 * 
	 * @param date
	 * @param pattern
	 * @return
	 */
	public static String toDateString(java.util.Date date, String pattern) {
		if (date == null) {
			return null;
		} else {
			return getDateParser(pattern).format(date);
		}
	}

	/**
	 * 将java.util.Date对象转换为字符串,使用默认日期格式
	 * 
	 * @param date
	 * @param pattern
	 * @return
	 */
	public static String toDateString(java.util.Date date) {
		if (date == null) {
			return null;
		} else {
			return getDateParser(DEFAULT_DATE_PATTERN).format(date);
		}
	}

	/**
	 * 将java.util.Date对象转换为时间字符串,使用默认日期格式
	 * 
	 * @param date
	 * @return
	 */
	public static String toDateTimeString(java.util.Date date) {
		if (date == null) {
			return null;
		} else {
			return getDateParser(DEFAULT_DATETIME_PATTERN).format(date);
		}
	}
	
	/**
	 * 根据时间变量返回时间字符串
	 * 
	 * @return 返回时间字符串
	 * @param pattern
	 *            时间字符串样式
	 * @param date
	 *            时间变量
	 * @author huangxin
	 */
	public static String dateToString(Date date, String pattern) {
		if (date == null) {
			return null;
		}
		try {
			SimpleDateFormat sfDate = new SimpleDateFormat(pattern);
			sfDate.setLenient(false);
			return sfDate.format(date);
		} catch (Exception e) {
			return null;
		}
	}

	/**
	 * 日期相减
	 * 
	 * @param date
	 * @param day
	 * @return
	 */
	public static Date diffDate(java.util.Date date, int day) {
		java.util.Calendar c = java.util.Calendar.getInstance();
		c.setTimeInMillis(getMillis(date) - ((long) day) * MILLIS_A_DAY);
		return c.getTime();
	}

	/**
	 * 返回毫秒
	 * 
	 * @param date
	 *            日期
	 * @return 返回毫秒
	 * @author doumingjun create 2007-04-07
	 */
	public static long getMillis(java.util.Date date) {
		java.util.Calendar c = java.util.Calendar.getInstance();
		c.setTime(date);
		return c.getTimeInMillis();
	}

	/**
	 * 日期相加
	 * 
	 * @param date
	 *            日期
	 * @param day
	 *            天数
	 * @return 返回相加后的日期
	 * @author doumingjun create 2007-04-07
	 */
	public static java.util.Date addDate(java.util.Date date, int day) {
		java.util.Calendar c = java.util.Calendar.getInstance();

		c.setTimeInMillis(getMillis(date) + ((long) day) * MILLIS_A_DAY);
		return c.getTime();
	}

	public static java.util.Date addDays(java.util.Date date, float day) {
		java.util.Calendar c = java.util.Calendar.getInstance();

		c.setTimeInMillis(getMillis(date) + ((long) (day * MILLIS_A_DAY)));
		return c.getTime();
	}

	/**
	 * 根据季度获得相应的月份
	 * 
	 * @param quarters
	 *            季度
	 * 
	 * @return 返回相应的月份
	 */
	public static String getMonth(String quarters) {
		String month;
		int m = Integer.parseInt(quarters);
		m = m * 3 - 2;
		if (m > 0 && m < 10) {
			month = "0" + String.valueOf(m);
		} else {
			month = String.valueOf(m);
		}
		return month;
	}

	/**
	 * 根据月份获得相应的季度
	 * 
	 * @param month
	 *            月份
	 * 
	 * @return 返回相应的季度
	 */
	public static String getQuarters(String month) {
		String quarters;
		int m = Integer.parseInt(month);
		m = (m + 2) / 3;
		quarters = String.valueOf(m);
		return quarters;
	}

	/**
	 * 根据月份获得相应的季度
	 * 
	 * @param month
	 *            月份
	 * 
	 * @return 返回相应的季度
	 */
	public static int getQuarters(int month) {
		return (month + 2) / 3;
	}

	/**
	 * 取上月最后一天
	 * 
	 * @return
	 */
	public static Date getLastDayOfLastMonth() {
		Calendar calendar = new GregorianCalendar();
		calendar.set(Calendar.DATE, 1); // 本月第一天
		calendar.add(Calendar.DATE, -1);// 上月最后一天
		return calendar.getTime();
	}

	/**
	 * 取上月第一天
	 * 
	 * @return
	 */
	public static Date getFristDayOfLastMonth() {
		Calendar calendar = new GregorianCalendar();
		calendar.set(Calendar.DATE, 1); // 本月第一天
		calendar.add(Calendar.MONTH, -1);// 上月第一天
		return calendar.getTime();
	}

	/**
	 * 取今天0时0分0秒
	 * 
	 * @return
	 */
	public static Date getTodayFristTime() {
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		calendar.set(Calendar.MILLISECOND, 0);
		return calendar.getTime();
	}

	/**
	 * 取今天0时0分0秒
	 * 
	 * @return
	 */
	public static String getTodayFristTimeStr() {
		return DateUtil.toDateString(getTodayFristTime(), DateUtil.DEFAULT_DATETIME_PATTERN);
	}

	/**
	 * 取当前时间之前N天的时间
	 * 
	 * @return
	 */
	public static String getCurrentBefore(int day) {
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - day);
		return DateUtil.toDateString(calendar.getTime(), DateUtil.DEFAULT_DATETIME_PATTERN);
	}

	/**
	 * 取当前时间之前N小时的时间
	 * 
	 * @return
	 */
	public static String getCurrentBeforeHour(int hour) {
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - hour);
		return DateUtil.toDateString(calendar.getTime(), DateUtil.DEFAULT_DATETIME_PATTERN);
	}

	/**
	 * 取当前时间之前N分钟的时间
	 * 
	 * @return
	 */
	public static String getCurrentBeforeMinute(int minute) {
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE) - minute);
		return DateUtil.toDateString(calendar.getTime(), DateUtil.DEFAULT_DATETIME_PATTERN);
	}

	/**
	 * @param date1
	 *            需要比较的时间 不能为空(null),需要正确的日期格式 "yyyy-MM-dd"
	 * @param date2
	 *            被比较的时间 不能为空(null)
	 * @return
	 */
	public static int compareDate(Date date1, Date date2) {
		int n = 0;
		Calendar c1 = Calendar.getInstance();
		Calendar c2 = Calendar.getInstance();
		try {
			c1.setTime(date1);
			c2.setTime(date2);
		} catch (Exception e) {

		}
		while (!c1.after(c2)) { // 循环对比,直到相等,n 就是所要的结果
			n++;
			c1.add(Calendar.DATE, 1);
		}
		n = n - 1;
		return n;
	}
	
	/**
	 * 获取当前时间的下一天
	 * @param date
	 * @return
	 */
	 public static String getNextDay() {
		Calendar calendar = Calendar.getInstance();
		SimpleDateFormat sdf = new SimpleDateFormat(DateUtil.DEFAULT_DATE_PATTERN);
		calendar.add(Calendar.DAY_OF_YEAR, 1);
		Date date = calendar.getTime();
		return sdf.format(date);
	  }
	 
	private static HashMap<String,String> verifyCodeMap = new HashMap<String,String>();
	/*public static void main(String[] args) throws Exception {
//		System.out.println(DateUtil.nowDate(DateUtil.DEFAULT_DATETIME_PATTERN));
//		String dateTimeStr = "2016-06-07 14:45:30";
//		String dateTimeStrA = getCurrentBeforeMinute(30);
//		System.out.println(toDateTime(dateTimeStr));
//		System.out.println(toDateTime(dateTimeStrA));
//		System.out.println(toDateTime(dateTimeStr).before(toDateTime(dateTimeStrA)));
//		verifyCodeMap.put("0", "0" + ",2016-06-07 14:45:30");
//		verifyCodeMap.put("1", "1" + ",2016-06-07 14:45:30");
//		verifyCodeMap.put("2", "2" + ",2016-06-07 14:45:30");
//		verifyCodeMap.put("3", "3" + ",2016-06-07 14:45:30");
//		verifyCodeMap.put("4", "4" + ",2016-06-07 14:45:30");
//		verifyCodeMap.put("5", "5" + ",2016-06-07 14:45:30");
//		verifyCodeMap.put("6", "6" + ",2016-06-07 14:45:30");
//		verifyCodeMap.put("7", "7" + ",2016-06-07 14:45:30");
//		verifyCodeMap.put("8", "8" + ",2016-06-07 15:45:30");
//		verifyCodeMap.put("9", "9" + ",2016-06-07 14:45:30");
//		HashMap<String,String> verifyCodeMapNew = (HashMap<String, String>) verifyCodeMap.clone();
//		for (Map.Entry<String, String> entry : verifyCodeMap.entrySet()) {
//			String dateTimeStr = entry.getValue().split(",")[1];
//			String dateTimeStrA = DateUtil.getCurrentBeforeMinute(30);
//			if (DateUtil.toDateTime(dateTimeStr).before(DateUtil.toDateTime(dateTimeStrA))) {
//				verifyCodeMapNew.remove(entry.getKey());
//			}
//		}
//		verifyCodeMap=verifyCodeMapNew;
//		System.out.println(verifyCodeMap);
		System.out.println(DateUtil.nowDate(DateUtil.DEFAULT_DATE_PATTERN));
		System.out.println(DateUtil.getNextDay());
	}*/
	
	
	
	public  static String strDate(){
		return nowDate(DEFAULT_DATETIME_PATTERN);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值