java时间处理工具类

java时间处理工具类,也是以前项目积累,共享之,共勉之

package com.util;

import java.sql.Timestamp;
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.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * 
 * 日期工具类
 * 
 * #Date: 2010-9-27
 * 
 * #Title: DateTimeUtil.java
 * 
 * #Company: CreditEase
 * 
 * #Time: 上午09:11:04
 * 
 * #Author: yub
 * 
 * #Email:yb989@126.com
 */
public class DateTimeUtil {
	private final static Logger logger = LoggerFactory.getLogger(DateTimeUtil.class);
	private static final String TIME_FORMAT_SHORT = "yyyyMMddHHmmss";
	private static final String TIME_FORMAT_YMD = "yyyy/MM/dd HH:mm:ss";
	public static final String TIME_FORMAT_NORMAL = "yyyy-MM-dd HH:mm:ss";
	private static final String TIME_FORMAT_ENGLISH = "MM/dd/yyyy HH:mm:ss";
	private static final String TIME_FORMAT_CHINA = "yyyy年MM月dd日 HH时mm分ss秒";
	private static final String TIME_FORMAT_CHINA_S = "yyyy年M月d日 H时m分s秒";
	private static final String TIME_FORMAT_SHORT_S = "HH:mm:ss";
	private static final String TIME_FORMAT_SHORT_SS = "HHmmss";
	private static final String TIME_FORMAT_SHORT_SSS = "yyyyMMddHHmmssS";

	private static final String DATE_FORMAT_SHORT = "yyyyMMdd";
	private static final String DATE_FORMAT_DOT = "yyyy.M.d";
	public static final String DATE_FORMAT_NORMAL = "yyyy-MM-dd";
	private static final String DATE_FORMAT_ENGLISH = "MM/dd/yyyy";
	private static final String DATE_FORMAT_CHINA = "yyyy年MM月dd日";
	private static final String DATE_FORMAT_CHINA_YEAR_MONTH = "yyyy年MM月";
	private static final String MONTH_FORMAT = "yyyyMM";
	private static final String YEAR_MONTH_FORMAT = "yyyy-MM";
	private static final String DATE_FORMAT_MINUTE = "yyyyMMddHHmm";
	private static final String MONTH_DAY_FORMAT = "MM-dd";
	
	public static final String TIME_FORMAT_NORMAL_24 = "yyyy-MM-dd HH:mm:ss";
	
	public static final String TIME_FORMAT_NORMAL_24_NO = "yyyyMMddHHmmss";

	//private static final SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NORMAL);

	//private static final SimpleDateFormat sdfTime = new SimpleDateFormat(TIME_FORMAT_NORMAL);


	private static ThreadLocal<SimpleDateFormat> sdfThread = new ThreadLocal<SimpleDateFormat>() {  
		protected synchronized SimpleDateFormat initialValue() {  
			return new SimpleDateFormat(DATE_FORMAT_NORMAL);  
		}  
	}; 
	private static ThreadLocal<SimpleDateFormat> sdfTimeThread = new ThreadLocal<SimpleDateFormat>() {  
		protected synchronized SimpleDateFormat initialValue() {  
			return new SimpleDateFormat(TIME_FORMAT_NORMAL);  
		}  
	};  
	
	/**
	 * 
	 * 方法描述 校验时间格式是否符合  yyyy-MM-dd HH:mm:ss 或者 yyyy-MM-dd
	 * 该方法只能校验格式 ,是不是真的日期还不能准确校验
	 *@date2016年11月25日下午9:23:16
	 *@author wangyl
	 *@param 
	 *@return boolean
	 *@throws Exception
	 */
	public static boolean validateStrIsDateStr(String dateStr){
		boolean b1=true;
		boolean b2=true;
		try{
			sdfThread.get().parse(dateStr);
		}catch(Exception ex){
			b1=false;
		}
		
		try{
			sdfTimeThread.get().parse(dateStr);
		}catch(Exception ex){
			b2=false;
		}
		//如果这两个都为false。说明确实不是我们想要的时间格式
		if(b1==false&&b2==false){
			return false;
		}
		return true;
	}
	
	/**
	 * 改变时间 譬如: changeDate(new Date(),Calendar.DATE, 2) 就是把当前时间加两天
	 * 
	 * @param originDate
	 *            原始时间
	 * @param field
	 *            改变类型
	 * @param distance
	 *            长度
	 * @return 改变后的时间
	 * @since 0.1
	 */
	public static Date changeDate(Date originDate, int field, int distance) {
		Calendar c = Calendar.getInstance(Locale.CHINA);
		c.setTime(originDate);
		c.add(field, distance);
		return c.getTime();
	}
	
	/**
	 * 把日期字符串转换为日期类型
	 * 
	 * @param dateStr
	 *            日期字符串
	 * @return 日期
	 * @since 0.1
	 */
	public static Date convertAsDate(String dateStr) {
		if(dateStr == null || "".equals(dateStr)){
			return null;
		}
		DateFormat fmt = null;
		if (dateStr.matches("\\d{14}")) {
			fmt = new SimpleDateFormat(TIME_FORMAT_SHORT);
		} else if (dateStr
				.matches("\\d{4}-\\d{1,2}-\\d{1,2} \\d{1,2}:\\d{1,2}:\\d{1,2}")) {
			fmt = new SimpleDateFormat(TIME_FORMAT_NORMAL);
		} else if (dateStr
				.matches("\\d{1,2}/\\d{1,2}/\\d{4} \\d{1,2}:\\d{1,2}:\\d{1,2}")) {
			fmt = new SimpleDateFormat(TIME_FORMAT_ENGLISH);
		} else if (dateStr
				.matches("\\d{4}年\\d{1,2}月\\d{1,2}日 \\d{1,2}时\\d{1,2}分\\d{1,2}秒")) {
			fmt = new SimpleDateFormat(TIME_FORMAT_CHINA);
		} else if (dateStr.matches("\\d{8}")) {
			fmt = new SimpleDateFormat(DATE_FORMAT_SHORT);
		} else if (dateStr.matches("\\d{4}-\\d{1,2}-\\d{1,2}")) {
			fmt = new SimpleDateFormat(DATE_FORMAT_NORMAL);
		} else if (dateStr.matches("\\d{1,2}/\\d{1,2}/\\d{4}")) {
			fmt = new SimpleDateFormat(DATE_FORMAT_ENGLISH);
		} else if (dateStr.matches("\\d{4}年\\d{1,2}月\\d{1,2}日")) {
			fmt = new SimpleDateFormat(DATE_FORMAT_CHINA);
		} else if (dateStr.matches("\\d{4}\\d{1,2}\\d{1,2}\\d{1,2}\\d{1,2}")){
			fmt = new SimpleDateFormat(DATE_FORMAT_MINUTE);
		} else if (dateStr.matches("\\d{1,2}:\\d{1,2}:\\d{1,2}")){
			fmt = new SimpleDateFormat(TIME_FORMAT_SHORT_S);
		}
		try {
			return fmt.parse(dateStr);
		} catch (ParseException e) {
			logger.warn(e.getMessage(), e);
			throw new IllegalArgumentException(
					"Date or Time String is invalid.");
		}
	}

	/**
	 * 
	 * Description: 将字符串转换为Date yyyy-mm-dd
	 *
	 * @param origin
	 * @return
	 * @Author yubin
	 * @Create Date: 2012-12-21 下午04:12:49
	 */
	public static Date convertAsDateString(String origin){
		try {
			return sdfThread.get().parse(origin);
		} catch (ParseException e) {
			logger.warn(e.getMessage(), e);
			throw new IllegalArgumentException(
					"Date or Time String is invalid.");
		}
	}
	/**
	 * 把 2010-02-04 12:12:34 这样的时间转换为 20100204121234
	 * 
	 * @param origin
	 *            原始时间字符串
	 * @return 转换后的字符串
	 * @since 0.1
	 */
	public static String convertAsShortDateString(String origin) {
		return origin == null ? origin : origin.replaceAll(
				"[-|:|\\s|年|月|日|时|分|秒|/]", "");
	}
	
	/**
	 * 
	 * 方法描述
	 * 传入带-的,转为不带-的
	 *@date2016年12月26日下午10:02:10
	 * 
	 *@param 
	 *@return String
	 *@throws Exception
	 */
	public static String replaceHX(String date) {
		return date.replace("-", "");
	}

	/**
	 * 把 20100204121234 这样的时间转换为 2010-02-04 12:12:34
	 * 
	 * @param origin
	 *            原始时间字符串
	 * @return 转换后的字符串
	 * @since 0.1
	 */
	public static String convertAsNormalDateString(String origin) {
		if (origin == null)
			return origin;
		try {
			if (origin.matches("\\d{8}")) {
				SimpleDateFormat fmt = new SimpleDateFormat(DATE_FORMAT_SHORT);
				return getDateNormalString(fmt.parse(origin));
			} else if (origin.matches("\\d{14}")) {
				SimpleDateFormat fmt = new SimpleDateFormat(TIME_FORMAT_SHORT);
				return getTimeNormalString(fmt.parse(origin));
			}
		} catch (ParseException e) {
			throw new IllegalArgumentException(e);
		}
		throw new IllegalArgumentException(origin
				+ "is invalid,String format is yyyyMMddHHmmss or yyyyMMdd");
	}

	/**
	 * 得到日期字符串,格式为 yyyy年MM月dd日
	 * 
	 * @param date
	 *            待格式化日期
	 * @return 返回格式化后的日期字符串
	 * @since 0.1
	 */
	public static String getDateChinaString(Date date) {
		DateFormat fmt = new SimpleDateFormat(DATE_FORMAT_CHINA);
		return fmt.format(date);
	}

	/**
	 * 得到日期字符串,格式为 yyyy年MM月dd日
	 * 
	 * @param date
	 *            待格式化日期
	 * @return 返回格式化后的日期字符串
	 * @since 0.1
	 */
	public static String getDateChinaString(String strDate) {  
		DateFormat format = new SimpleDateFormat(DATE_FORMAT_CHINA);  
		String date = "";

		date = format.format(java.sql.Date.valueOf(strDate));  

		return date;  
	}

	public static String getDateChinaStringYearMonth(Date date) {
		DateFormat fmt = new SimpleDateFormat(DATE_FORMAT_CHINA_YEAR_MONTH);
		return fmt.format(date);
	}



	/**
	 * 得到日期字符串,格式为 MM/dd/yyyy
	 * 
	 * @param date
	 *            待格式化日期
	 * @return 返回格式化后的日期字符串
	 * @since 0.1
	 */
	public static String getDateEnglishString(Date date) {
		DateFormat fmt = new SimpleDateFormat(DATE_FORMAT_ENGLISH);
		return fmt.format(date);
	}

	/**
	 * 得到日期字符串,格式为 yyyy-MM-dd
	 * 
	 * @param date
	 *            待格式化日期
	 * @return 返回格式化后的日期字符串
	 * @since 0.1
	 */
	public static String getDateNormalString(Date date) {
		DateFormat fmt = new SimpleDateFormat(DATE_FORMAT_NORMAL);
		return fmt.format(date);
	}

	/**
	 * 得到日期字符串,格式为 MM-dd
	 * 
	 * @param date
	 *            待格式化日期
	 * @return 返回格式化后的日期字符串
	 * @since 0.1
	 */
	public static String getMonthDayDateNormalString(Date date) {
		DateFormat fmt = new SimpleDateFormat(MONTH_DAY_FORMAT);
		return fmt.format(date);
	}
	/**
	 * 
	 * Description: 得到日期字符串,格式为yyyy-MM
	 *
	 * @param date
	 * @return
	 * Create Date: 2012-8-29 上午11:20:31
	 */
	public static String getYearMonthString(Date date){
		DateFormat fmt = new SimpleDateFormat(YEAR_MONTH_FORMAT);
		return fmt.format(date);
	}
	/**
	 * 
	 * Description: 得到当前日期字符串,格式为yyyy-MM
	 *
	 * @return
	 * Create Date: 2012-8-29 上午11:28:27
	 */
	public static String getNowYearMonthString(){
		return getYearMonthString(new Date());
	}
	/**
	 * 得到日期字符串,格式为 yyyyMMdd
	 * 
	 * @param date
	 *            待格式化日期
	 * @return 返回格式化后的日期字符串
	 * @since 0.1
	 */
	public static String getDateShortString(Date date) {
		DateFormat fmt = new SimpleDateFormat(DATE_FORMAT_SHORT);
		return fmt.format(date);
	}

	public static String getDateDotString(Date date) {
		DateFormat fmt = new SimpleDateFormat(DATE_FORMAT_DOT);
		return fmt.format(date);
	}
	
	/**
	 * 将日是期格式化为yyyyMMdd
	 *
	 *@date2016年12月22日上午10:54:15
	 *@param 
	 *@return String
	 *@throws Exception
	 */
	public static String dateFormatToShortDate(String date){
		if(StringUtils.isEmpty(date) || StringUtils.isEmpty(date.trim())){
			return "";
		}
		DateFormat fmt = new SimpleDateFormat(DATE_FORMAT_SHORT);
		return fmt.format(convertAsDateString(date));
	}
	
	/**
	 * 将日是期格式化为 yyyyMMddHHmmss
	 *
	 *@date2016年12月22日上午10:54:43
	 *@param 
	 *@return String
	 *@throws Exception
	 */
	public static String dateTimeFormatToShortDatetime(String datetime) throws Exception{
		if(StringUtils.isEmpty(datetime) || StringUtils.isEmpty(datetime.trim())){
			return "";
		}
		DateFormat fmt = new SimpleDateFormat(TIME_FORMAT_SHORT);
		return fmt.format(getStrToDate(datetime, TIME_FORMAT_NORMAL));
	}

	/**
	 * 得到日期字符串,格式为 yyyy年MM月dd日
	 * 
	 * @return 返回当前日期的字符串
	 */
	public static String getNowDateChinaString() {
		return getDateChinaString(new Date());
	}

	/**
	 * @return 获取时间戳
	 */
	public static java.sql.Timestamp getNowTimeStamp()
	{
		return new java.sql.Timestamp(System.currentTimeMillis());
	}

	/**
	 * 得到日期字符串,格式为 MM/dd/yyyy
	 * 
	 * @return 返回当前日期的字符串
	 */
	public static String getNowDateEnglishString() {
		return getDateEnglishString(new Date());
	}

	/**
	 * 得到日期字符串,格式为 yyyy-MM-dd
	 * 
	 * @return 返回当前日期的字符串
	 */
	public static String getNowDateNormalString() {
		return getDateNormalString(new Date());
	}

	/**
	 * 得到日期字符串,格式为 yyyy-MM-dd
	 * 
	 * @param interval
	 *            间隔天数
	 * @return
	 */
	public static String getNowDateNormalString(int interval) {
		Calendar c = Calendar.getInstance();
		c.setTime(new Date());
		c.add(Calendar.DATE, interval);
		return getDateNormalString(c.getTime());
	}
	/**
	 * 获得指定日期的字符串,格式为MM-dd
	 * @param interval
	 * @return
	 */
	public static String getNowMonthNormalString(int interval){
		return getNowDateNormalString(interval).substring(5, 10);
	}
	/**
	 * 根据输入日期向后累加interval天
	 * @param day
	 * @param interval
	 * @return
	 * @throws ParseException
	 */
	public static String getIntervalDaysLater(String day,int interval){
		if(day == null || "".equals(day)){
			return "";
		}
		Calendar c = Calendar.getInstance();
		try {
			c.setTime(sdfThread.get().parse(day));
		} catch (ParseException e) {
			e.printStackTrace();
		}
		c.add(Calendar.DATE, interval);
		return getDateNormalString(c.getTime());
	}
	/**
	 * 
	 * Description: 得到当前日期累加interval天
	 *
	 * @param interval
	 * @return
	 * Create Date: 2012-8-29 下午04:41:43
	 */
	public static String getNowDateIntervalDaysLater(int interval){
		return getIntervalDaysLater(getNowDateNormalString(),interval);
	}

	/**
	 * 
	 * Description: 月份累加interval
	 *
	 * @param day
	 * @param interval
	 * @return
	 * @throws ParseException
	 * Create Date: 2012-8-28 上午11:51:41
	 */
	public static String getIntervalMonthLater(String day,int interval){
		Calendar c = Calendar.getInstance();
		try {
			c.setTime(sdfThread.get().parse(day));
		} catch (ParseException e) {
			e.printStackTrace();
		}
		c.add(Calendar.MONTH, interval);
		return getDateNormalString(c.getTime());
	}

	/**
	 * 得到日期字符串,格式为 MM-dd
	 * 
	 * @param interval
	 *            间隔天数
	 * @return
	 */
	public static String getNowMonthDayDateNormalString(int interval) {
		Calendar c = Calendar.getInstance();
		c.setTime(new Date());
		c.add(Calendar.DATE, interval);
		return getMonthDayDateNormalString(c.getTime());
	}

	/**
	 * 得到日期字符串,格式为 yyyyMMdd
	 * 
	 * @return 返回当前日期的字符串
	 */
	public static String getNowDateShortString() {
		return getDateShortString(new Date());
	}

	/**
	 * 得到时间字符串,格式为 yyyy年MM月dd日 HH时mm分ss秒
	 * 
	 * @return 返回当前时间的字符串
	 */
	public static String getNowTimeChinaString() {
		return getTimeChinaString(new Date());
	}
	/**
	 * 
	 * Description: 得到时间字符串,格式为 HH:mm:ss
	 *
	 * @return
	 * Create Date: 2012-8-29 上午11:34:35
	 */
	public static String getNowTimeNormalStringS() {
		return getTimeNormalStringS(new Date());
	}
	public static String getNowTimeNormalStringSS() {
		return getTimeNormalStringSS(new Date());
	}
	public static String getNowTimeNormalStringSSS(){
		return getTimeNormalStringSSS(new Date());
	}
	/**
	 * 得到时间字符串,格式为 MM/dd/yyyy HH:mm:ss
	 * 
	 * @return 返回当前时间的字符串
	 * 
	 */
	public static String getNowTimeEnglishString() {
		return getTimeEnglishString(new Date());
	}

	/**
	 * 得到时间字符串,格式为 yyyy-MM-dd HH:mm:ss
	 * 
	 * @return 返回当前时间的字符串
	 */
	public static String getNowTimeNormalString() {
		return getTimeNormalString(new Date());
	}

	/**
	 * 得到时间字符串,格式为 yyyyMMddHHmmss
	 * 
	 * @return 返回当前时间的字符串
	 */
	public static String getNowTimeShortString() {
		return getTimeShortString(new Date());
	}

	/**
	 * 得到时间字符串,格式为 yyyy年MM月dd日 HH:mm:ss
	 * 
	 * @param date
	 *            待格式化日期
	 * @return 返回格式化后的时间字符串
	 * @since 0.1
	 */
	public static String getTimeChinaString(Date date) {
		DateFormat fmt = new SimpleDateFormat(TIME_FORMAT_CHINA);
		return fmt.format(date);
	}

	public static String getTimeChinaStringS(Date date) {
		DateFormat fmt = new SimpleDateFormat(TIME_FORMAT_CHINA_S);
		return fmt.format(date);
	}

	/**
	 * 得到时间字符串,格式为 MM/dd/yyyy HH:mm:ss
	 * 
	 * @param date
	 *            待格式化日期
	 * @return 返回格式化后的时间字符串
	 * @since 0.1
	 */
	public static String getTimeEnglishString(Date date) {
		DateFormat fmt = new SimpleDateFormat(TIME_FORMAT_ENGLISH);
		return fmt.format(date);
	}

	/**
	 * 得到时间字符串,格式为 yyyy-MM-dd HH:mm:ss
	 * 
	 * @param date
	 *            待格式化日期
	 * @return 返回格式化后的时间字符串
	 * @since 0.1
	 */
	public static String getTimeNormalString(Date date) {
		DateFormat fmt = new SimpleDateFormat(TIME_FORMAT_NORMAL);
		return fmt.format(date);
	}


	/**
	 * 得到时间字符串,格式为 yyyy/MM/dd HH:mm:ss
	 * 
	 * @param date
	 *            待格式化日期
	 * @return 返回格式化后的时间字符串
	 * @since 0.1
	 */
	public static String getTimeNormalSprit(Date date) {
		DateFormat fmt = new SimpleDateFormat(TIME_FORMAT_YMD);
		return fmt.format(date);
	}
	/**
	 * 
	 * Description: 得到时间字符串,格式为HH:mm:ss
	 *
	 * @param date
	 * @return
	 * Create Date: 2012-8-29 上午11:21:20
	 */
	public static String getTimeNormalStringS(Date date) {
		DateFormat fmt = new SimpleDateFormat(TIME_FORMAT_SHORT_S);
		return fmt.format(date);
	}

	public static String getTimeNormalStringSS(Date date) {
		DateFormat fmt = new SimpleDateFormat(TIME_FORMAT_SHORT_SS);
		return fmt.format(date);
	}
	public static String getTimeNormalStringSSS(Date date){
		DateFormat fmt = new SimpleDateFormat(TIME_FORMAT_SHORT_SSS);
		return fmt.format(date);
	}
	/**
	 * 得到时间字符串,格式为 yyyyMMddHHmmss
	 * 
	 * @param date
	 *            待格式化日期
	 * @return 返回格式化后的时间字符串
	 * @since 0.1
	 */
	public static String getTimeShortString(Date date) {
		DateFormat fmt = new SimpleDateFormat(TIME_FORMAT_SHORT);
		return fmt.format(date);
	}

	/**
	 * 得到时间字符串,格式为 yyyyMM
	 * 
	 * @param date
	 * @return
	 * @since 0.1
	 */
	public static String getMonthString(Date date) {
		DateFormat fmt = new SimpleDateFormat(MONTH_FORMAT);
		return fmt.format(date);
	}

	/**
	 * 得到时间字符串,格式为 M月d日
	 * 
	 * @param day
	 *            相隔几天
	 * @return
	 * @since 0.1
	 */
	public static String getMonthDay(int day) {
		DateFormat fmt = new SimpleDateFormat("M月d日");
		Calendar c = Calendar.getInstance();
		c.setTime(new Date());
		c.add(Calendar.DATE, day);
		return fmt.format(c.getTime());
	}

	/**
	 * 获得日期集合
	 * 
	 * @param beginDate
	 *            开始日期
	 * @param endDate
	 *            结束日期
	 * @return
	 * @throws ParseException
	 */
	public static List<String> getDateList(String beginDate, String endDate)
			throws ParseException {
		SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NORMAL);
		List<String> list = new ArrayList<String>();
		Calendar c1 = Calendar.getInstance(Locale.CHINA);
		c1.setTime(sdf.parse(beginDate));
		Calendar c2 = Calendar.getInstance(Locale.CHINA);
		c2.setTime(sdf.parse(endDate));
		long l1 = c1.getTimeInMillis();
		long l2 = c2.getTimeInMillis();
		int interval = (int) ((l2 - l1) / (1000 * 60 * 60 * 24));
		for (int i = 0; i <= interval; i++) {
			Calendar c = Calendar.getInstance();
			c.setTime(c1.getTime());
			c.add(Calendar.DATE, i);
			list.add(sdf.format(c.getTime()));
		}
		return list;
	}
	/**
	 * 获得输入日期所在周的第一天(周一为第一天)
	 * @param day
	 * @return
	 * @throws ParseException
	 */
	public static String getFirstDayOfWeek(String day) throws ParseException{
		Calendar c1 = Calendar.getInstance(Locale.CHINA);
		c1.setTime(sdfThread.get().parse(day));
		c1.setFirstDayOfWeek(Calendar.MONDAY);
		c1.set(Calendar.DAY_OF_WEEK, c1.getFirstDayOfWeek());
		return sdfThread.get().format(c1.getTime());
	}

	/**
	 * 获得输入日期所在周的最后一天(周日为最后一天)
	 * @param day
	 * @return
	 * @throws ParseException
	 */
	public static String getLastDayOfWeek(String day) throws ParseException{
		Calendar c1 = Calendar.getInstance(Locale.CHINA);
		c1.setTime(sdfThread.get().parse(day));
		c1.setFirstDayOfWeek(Calendar.MONDAY);
		c1.set(Calendar.DAY_OF_WEEK, c1.getFirstDayOfWeek()+6);
		return sdfThread.get().format(c1.getTime());
	}
	/**
	 * 计算输入日期所在月的最后一天
	 * @param day
	 * @return
	 * @throws ParseException
	 */
	public static String getLastDayOfMonth(String day) throws ParseException{
		Calendar c1 = Calendar.getInstance(Locale.CHINA);
		c1.setTime(sdfThread.get().parse(day));
		c1.set(Calendar.DAY_OF_MONTH, 1);
		c1.add(Calendar.MONTH, 1);
		c1.add(Calendar.DAY_OF_MONTH, -1);
		return sdfThread.get().format(c1.getTime());
	}
	/**
	 * 
	 * Description: 计算当前日期上一个月的最后一天
	 *
	 * @return yyyy年MM月dd日
	 * @throws Exception
	 * @Create Date: 2013-9-28 下午01:47:24
	 */
	public static String getLastDayOfMonthChina() throws Exception {
		return getDateChinaString(
				convertAsDate(
						getLastDayOfMonth(
								getLastDate(DATE_FORMAT_NORMAL))));
	}
	/**
	 * 计算输入日期所在月的第一天
	 * @param day
	 * @return
	 * @throws ParseException
	 */
	public static String getFirstDayOfMonth(String day) throws ParseException{
		Calendar c1 = Calendar.getInstance(Locale.CHINA);
		c1.setTime(sdfThread.get().parse(day));
		c1.set(Calendar.DAY_OF_MONTH, 1);
		return sdfThread.get().format(c1.getTime());
	}

	/**
	 * 
	 * Description: 计算当前日期上一个月的第一天
	 *
	 * @return yyyy年MM月dd日
	 * @throws Exception
	 * @Create Date: 2013-9-28 下午01:39:21
	 */
	public static String getFirstDayOfMonthChina() throws Exception {
		return getDateChinaString(
				convertAsDate(
						getFirstDayOfMonth(
								getLastDate(DATE_FORMAT_NORMAL))));
	}

	/**
	 * 是否是当月的第一天
	 * @param day
	 * @return
	 * @throws ParseException
	 */
	public static boolean isFirstDayOfMonth(String day) throws ParseException{
		return day.equals(getFirstDayOfMonth(day))? true : false;
	}

	/**
	 * 是否是当月的最后一天
	 * @param day
	 * @return
	 * @throws ParseException
	 */
	public static boolean isLastDayOfMonth(String day) throws ParseException{
		return day.equals(getLastDayOfMonth(day))? true : false;
	}



	/**
	 * 是否是当前周的第一天
	 * @param day
	 * @return
	 * @throws ParseException
	 */
	public static boolean isFirstDayOfWeek(String day) throws ParseException{
		return day.equals(getFirstDayOfWeek(day))? true : false;
	}

	/**
	 * 是否是当前周的最后一天
	 * @param day
	 * @return
	 * @throws ParseException
	 */
	public static boolean isLastDayOfWeek(String day) throws ParseException{
		return day.equals(getLastDayOfWeek(day))? true : false;
	}
	/**
	 * 计算输入日期所在周是否跨月
	 * @param day
	 * @return
	 * @throws ParseException
	 */
	public static boolean isDayBetweenMonthAndWeek(String day) throws ParseException{
		String firstDayOfMonth = getFirstDayOfMonth(day);
		String firstDayOfWeek = getFirstDayOfWeek(day);
		Pattern p = Pattern.compile("\\d{4}-\\d{2}-01");
		Matcher m = p.matcher(day);
		if(firstDayOfWeek.compareTo(firstDayOfMonth) < 0 && !m.matches()){
			return true;
		}else{
			return false;
		}
	}
	/**
	 * 输入的日期是否为时间格式
	 * @param input
	 * @return
	 */
	public static boolean isInputDate(String input){
		return input.matches("\\d{4}-\\d{1,2}-\\d{1,2}");
	}
	public static boolean isInputDateNormalString(String input){
		return input.matches("\\d{4}-\\d{2}-\\d{2}");
	}
	/**
	 * 将日期字符串格式化为yyyy-MM-dd
	 * @param input
	 * @return
	 */
	public static String formatDateString(String input) throws IllegalArgumentException{
		String month = "";
		String day = "";
		try {
			if (!isInputDate(input)){
				throw new IllegalArgumentException("日期格式不合法");
			}
			if (isInputDateNormalString(input)){
				return input;
			}
			month = input.substring(input.indexOf("-") + 1, input
					.lastIndexOf("-"));
			if (month.length() == 1 && month.indexOf("0") != 0)
				month = "0" + month;
			day = input.substring(input.lastIndexOf("-") + 1, input.length());
			if (day.length() == 1 && day.indexOf("0") != 0)
				day = "0" + day;
		} catch (Exception e) {
			e.printStackTrace();
			return input;
		}
		return input.substring(0, 4)+"-"+month+"-"+day;
	}

	/**
	 * 组装当前时间的开始时间戳
	 * 
	 * */
	public static String getDateNowStr(){

		Calendar c1 = Calendar.getInstance();
		int year = c1.get(Calendar.YEAR);
		//当前月
		int month = (c1.get(Calendar.MONTH))+1;
		//当前月的第几天:即当前日
		int day_of_month = c1.get(Calendar.DAY_OF_MONTH);
		String time=year+"-"+month+"-"+day_of_month+" 00:00:00";
		return time;
	}

	/**
	 * 组装当前时间的结束时间戳
	 * 
	 * */
	public static String getDateNowStrend(){

		Calendar c1 = Calendar.getInstance();
		int year = c1.get(Calendar.YEAR);
		//当前月
		int month = (c1.get(Calendar.MONTH))+1;
		//当前月的第几天:即当前日
		int day_of_month = c1.get(Calendar.DAY_OF_MONTH);
		String time=year+"-"+month+"-"+day_of_month+" 23:59:59";
		return time;
	}



	/**
	 * 获取上月的年月日
	 * @param toFormat 日期格式
	 * @return
	 */
	public static String getLastDate(String toFormat) {
		Calendar c = Calendar.getInstance();
		c.add(Calendar.MONTH, -1);
		SimpleDateFormat format = new SimpleDateFormat(toFormat);
		String time = format.format(c.getTime());
		return time;
	}

	/**
	 * 获取本月的年月日
	 * @param toFormat 日期格式
	 * @return
	 */
	public static String getDate(String toFormat) {
		SimpleDateFormat format = new SimpleDateFormat(toFormat);
		String time = format.format(new Date());
		return time;
	}

	/**
	 * 获取上月的年
	 * @param toFormat 日期格式
	 * @return
	 */
	public static String getLastYearMonth() {
		Calendar c = Calendar.getInstance();
		c.add(Calendar.MONTH, -1);
		SimpleDateFormat format = new SimpleDateFormat(YEAR_MONTH_FORMAT);
		String time = format.format(c.getTime());
		return time;
	}

	/**
	 * 获取本月的年月
	 * @param toFormat 日期格式
	 * @return
	 */
	public static String getYearMonth() {
		SimpleDateFormat format = new SimpleDateFormat(YEAR_MONTH_FORMAT);
		String time = format.format(new Date());
		return time;
	}

	/**
	 * 获取上月的年
	 * @param toFormat 日期格式
	 * @return
	 */
	public static String getLastYearMonth(String toFormat) {
		Calendar c = Calendar.getInstance();
		c.add(Calendar.MONTH, -1);
		SimpleDateFormat format = new SimpleDateFormat(toFormat);
		String time = format.format(c.getTime());
		return time;
	}

	/**
	 * 取得当月天数
	 * */
	public static int getThisMonthDays() {
		Calendar a = Calendar.getInstance();
		a.set(Calendar.DATE, 1);// 把日期设置为当月第一天
		a.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天
		int maxDate = a.get(Calendar.DATE);
		return maxDate;
	}

	/**
	 * 得到指定月的天数
	 * */
	public static int getLastMonthDays(int year, int month) {
		Calendar a = Calendar.getInstance();
		a.set(Calendar.YEAR, year);
		a.set(Calendar.MONTH, month - 1);
		a.set(Calendar.DATE, 1);// 把日期设置为当月第一天
		a.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天
		int maxDate = a.get(Calendar.DATE);
		return maxDate;
	}

	/**
	 * 获取上月天数
	 * @return
	 */
	public static int getLastMonthDays() {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.DAY_OF_MONTH, 1);
		cal.add(Calendar.DAY_OF_MONTH, -1);
		int maxDate = cal.get(Calendar.DAY_OF_MONTH);
		return maxDate;
	}


	public static String getStrDatetosimp(String date){
		SimpleDateFormat fmt = new SimpleDateFormat(DATE_FORMAT_SHORT);
		try {
			return getDateShortString(fmt.parse(date));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	/**
	 * 指定时间前几天
	 * */
	public static Date getDateBeforeday(Date dd ,int day){

		Calendar calendar = Calendar.getInstance();
		calendar.setTime(dd);
		calendar.add(Calendar.DATE, -day);    //得到前一天
		Date date = calendar.getTime();

		return date;
	}

	/**
	 * 指定时间前几天
	 * */
	public static Date getDateAfterday(Date dd ,int day){

		Calendar calendar = Calendar.getInstance();
		calendar.setTime(dd);
		calendar.add(Calendar.DATE, day);    //得到前一天
		Date date = calendar.getTime();

		return date;
	}

	/**
	 * 指定时间几个月后
	 * */
	public static Date getDateAfterMonth(Date dd ,int month){

		Calendar calendar = Calendar.getInstance();
		calendar.setTime(dd);
		calendar.add(Calendar.MONTH, month);
		Date date = calendar.getTime();

		return date;
	}

	/**
	 * 指定时间几个年后
	 * */
	public static Date getDateAfterYear(Date dd ,int year){

		Calendar calendar = Calendar.getInstance();
		calendar.setTime(dd);
		calendar.add(Calendar.YEAR, year);
		Date date = calendar.getTime();

		return date;
	}

	/**
	 * 指定时间前几天
	 * */
	public static String getStrDateBeforeday(Date dd ,int day){

		Calendar calendar = Calendar.getInstance();
		calendar.setTime(dd);
		calendar.add(Calendar.DATE, -day);    //得到前一天
		Date date = calendar.getTime();
		return sdfThread.get().format(date);
	}

	/**
	 * 获取某一天的某几个月前的某一天
	 * */
	public static Date getPreviousMonthOfDay(Date dd ,int month){

		Calendar calendar = Calendar.getInstance();
		calendar.setTime(dd);
		calendar.add(Calendar.MONTH, -month);
		Date date = calendar.getTime();

		return date;
	}

	/**
	 * 
	 * Description: 得到当前Date类型日期,格式为 yyyy-MM-dd
	 *
	 * @return
	 * @throws ParseException
	 * @Author ouyangjin
	 * @Create Date: 2013-10-9 下午03:21:07
	 */
	public static Date getCurrentTime() throws ParseException{
		return sdfThread.get().parse(getNowDateNormalString());
	}

	/**
	 * 
	 * Description: 得到当前Date类型日期,格式为 yyyy-MM-dd hh:mm:ss
	 *
	 * @return
	 * @throws ParseException
	 * @Author wangyl
	 * @Create Date: 2013-10-9 下午03:21:07
	 */
	public static Date getCurrentTimeStamp() throws ParseException{
		return sdfTimeThread.get().parse(getNowTimeNormalString());
	}

	/**
	 * 
	 * @Title: getStrToDate
	 * @Description: String转为Date
	 * @param date
	 * @return
	 * @throws Exception
	 * Date
	 * @throws
	 *
	 * @Author dyp
	 * @Create Date: 2013-11-22 下午04:05:39
	 */
	public static Date getStrToDate(String date,String fomtter) throws Exception{
		DateFormat df = new SimpleDateFormat(fomtter);
		return df.parse(date);
	}
	/**
	 * 
	 * @param date
	 * @return yyyy-MM-dd HH:ss:mm
	 * @throws Exception
	 */
	public static Date getStrDate(String date) throws Exception{
		return sdfTimeThread.get().parse(date);
	}

	/**
	 * 
	 * @Title: between
	 * @Description: 判断日期是否在指定区间内,如09:55:00是否在08:40:30到10:10:00之间
	 * @param curentTime 需要判断的日期
	 * @param startTime	   区间开始日期
	 * @param endTime	   区间结束日期
	 * @return
	 * boolean
	 * @throws
	 *
	 * @Author dyp
	 * @Create Date: 2013-12-4 下午06:16:24
	 */
	public static boolean betweenTime(String curentTime, String startTime, String endTime) {
		if (startTime.compareTo(endTime) > 0) {
			// 如果开始时间大于结束时间,结束时间+24
			endTime = String.format("%d%s", Integer.valueOf(endTime.substring(
					0, 2)) + 24, endTime.substring(2));
		}
		return (curentTime.compareTo(startTime) >= 0 && curentTime
				.compareTo(endTime) <= 0);
	}
	
	
	public static boolean betweenTime2(String curentTime, String startTime, String endTime) {
		if (startTime.compareTo(endTime) > 0) {
			// 如果开始时间大于结束时间,结束时间+24
			endTime = String.format("%d%s", Integer.valueOf(endTime.substring(
					0, 2)) + 24, endTime.substring(2));
		}
		return (curentTime.compareTo(startTime) > 0 && curentTime
				.compareTo(endTime) < 0);
	}
	

	/**
	 * @Description: 计算给定时间到现在的间隔天数 yyyy-MM-dd
	 * @param string
	 * @return 
	 * @throws Exception
	 */
	public static int getDayLength(String date) throws Exception{
		Date fromDate = getStrToDate(date,TIME_FORMAT_NORMAL);  //开始日期		
		Date toDate = getStrToDate(new StringBuilder(getTimeNormalString(new Date()).substring(0, 10)).append(" 00:00:00").toString(),TIME_FORMAT_NORMAL); //结束日期
		long from = fromDate.getTime();
		long to = toDate.getTime();
		int day = (int)((to-from)/(24*60*60*1000));
		return day;		
	}
	
	/**
	 * @Description: 计算给开始日期 结束日期 的间隔天数 yyyy-MM-dd
	 * @param string
	 * @return 
	 * @throws Exception
	 */
	public static int getDayLength(String start_date,String end_date) throws Exception{
		Date fromDate = getStrToDate(start_date,DATE_FORMAT_NORMAL);  //开始日期		
		Date toDate = getStrToDate(end_date,DATE_FORMAT_NORMAL); //结束日期
		long from = fromDate.getTime();
		long to = toDate.getTime();
		int day = (int)((to-from)/(24*60*60*1000));
		return day;		
	}
	
	/**
	 * @Description: 计算给开始日期 结束日期 的间隔天数 yyyy-MM-dd
	 * @param string
	 * @return 
	 * @throws Exception
	 */
	public static int getDayLengthChar8(String start_date,String end_date) throws Exception{
		Date fromDate = getStrToDate(start_date,DATE_FORMAT_SHORT);  //开始日期		
		Date toDate = getStrToDate(end_date,DATE_FORMAT_SHORT); //结束日期
		long from = fromDate.getTime();
		long to = toDate.getTime();
		int day = (int)((to-from)/(24*60*60*1000));
		return day;		
	}
	
	/**
	 * @Description: 转换为格式 yyyy-MM-dd HH:mm:ss
	 * @param string
	 * @return 
	 * @throws Exception
	 */
	public static Date covertDateFromStr(String date) throws Exception{
		return sdfTimeThread.get().parse(date);
	}

	public static String nextMonthOfNow(){
		Calendar calendar = Calendar.getInstance();
		//月份+1
		calendar.add(Calendar.MONTH, 1);
		//定义输出格式
		SimpleDateFormat formatter = new SimpleDateFormat(DATE_FORMAT_CHINA);
		//得到格式化字符串
		String nextMonth = formatter.format(calendar.getTime());
		return nextMonth;
	}



	/**
	 * String转换成Timestamp
	 * @param str
	 * @return
	 */
	public static Timestamp str2Timestamp(String str) {
		if(null != str && !"".equals(str)){
			Date date = str2Date(str, TIME_FORMAT_NORMAL);
			return new Timestamp(date.getTime());
		}
		return null;
	}

	/**
	 * Timestamp转换成String
	 * @param time
	 * @return
	 */
	public static String timestamp2Str(Timestamp time) {
		if(null != time && !"".equals(time)){
			Date date = new Date(time.getTime());
			return date2Str(date, TIME_FORMAT_NORMAL);
		}
		return null;
	}

	/**
	 * Timestamp转换成String 格式为:yyyy-MM-dd
	 * @param time
	 * @return
	 */
	public static String timestamp2String(Timestamp time) {
		if(null != time && !"".equals(time)){
			Date date = new Date(time.getTime());
			return date2Str(date, DATE_FORMAT_NORMAL);
		}
		return null;
	}
/**
 * date转换成String
 * @param date
 * @param format
 * @return
 */
	public static String date2Str(Date date, String format) {
		if (null != date && !"".equals(date)) {
			SimpleDateFormat sdf = new SimpleDateFormat(format);
			return sdf.format(date);
		}
		return null;
	}

	/**
	 * sql转换成Date
	 * @param str
	 * @param format
	 * @return
	 */
	public static Date str2Date(String str, String format){
		if (null != str && !"".equals(str)) {
			SimpleDateFormat sdf = new SimpleDateFormat(format);
			Date date = null;
			try {
				date = sdf.parse(str);
				return date;
			} catch (ParseException e) {
				e.printStackTrace();
			}
		}
		return null;
	}
	
	/** 
	 * 将timestamp转换成date 
	 * @author hellostoy 
	 * @param tt 
	 * @return 
	 */  
	public static Date timestampToDate(Timestamp tt){  
	    return new Date(tt.getTime());  
	}  



	//	public static long getTwoDateMinute(Date nowDate,Date clientDate){
	//		long between=(nowDate.getTime()-clientDate.getTime())/1000;//除以1000是为了转换成秒
	//		return between%3600/60;
	//	}
//	public static void main(String[] args) throws Exception{
//		//boolean b=DateTimeUtil.validateStrIsDateStr("2016-02-45 122:22:22");
//		System.out.println(getDayLength("2016-11-12","2017-11-12"));
//		System.out.println(convertAsDate("20160918"));
//	}
	
	
	/**
	 * Timestamp转换成String
	 * @param time
	 * @return
	 */
	public static String timestamp2Str24(Timestamp time) {
		if(null != time && !"".equals(time)){
			Date date = new Date(time.getTime());
			return date2Str(date, TIME_FORMAT_NORMAL_24);
		}
		return null;
	}
	
	public static String timestamp2Str24No(Timestamp time) {
		if(null != time && !"".equals(time)){
			Date date = new Date(time.getTime());
			return date2Str(date, TIME_FORMAT_NORMAL_24_NO);
		}
		return null;
	}


	/**
	 * @Description: 计算传入日期 Date的后day天的日期
	 * @author panliang
	 * @date 2017年9月27日 下午5:07:50
	 * @param @param dd
	 * @param @param day
	 * @param @return
	 * @return String   
	 * @throws
	 */
	public static String getStrDateAfterday(Date dd ,int day){

		Calendar calendar = Calendar.getInstance();
		calendar.setTime(dd);
		calendar.add(Calendar.DATE, day);    
		Date date = calendar.getTime();
		return sdfThread.get().format(date);
	}
	
	/**
	 * 
	 * @Description: 获取当前系统时间前一天
	 * @author panliang
	 * @date 2017年11月7日 上午10:05:49
	 * @param @return
	 * @return String   
	 * @throws
	 */
	public static String getDateNormalBeforeday(){

		Date dNow = new Date();   //当前时间
		Calendar calendar = Calendar.getInstance(); //得到日历
		calendar.setTime(dNow);//把当前时间赋给日历
		calendar.add(Calendar.DAY_OF_MONTH, -1);  //设置为前一天
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); //设置时间格式
		Date dBefore = calendar.getTime();   //得到前一天的时间
		return sdf.format(dBefore);    //格式化前一天
	}
	
	/**
	 * 
	 * @Description: 获取当前系统时间前一天
	 * @author panliang
	 * @date 2017年11月7日 上午10:05:49
	 * @param @return
	 * @return String   
	 * @throws
	 */
	public static String getDateShortBeforeday(){

		Date dNow = new Date();   //当前时间
		Calendar calendar = Calendar.getInstance(); //得到日历
		calendar.setTime(dNow);//把当前时间赋给日历
		calendar.add(Calendar.DAY_OF_MONTH, -1);  //设置为前一天
		SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd"); //设置时间格式
		Date dBefore = calendar.getTime();   //得到前一天的时间
		return sdf.format(dBefore);    //格式化前一天
	}
	
	/**
	 * @Description: 获取当前日期的下一个月
	 * @author panliang
	 * @param @param busiDate
	 * @param @return   
	 * @return String  
	 * @throws
	 * @date 2017年12月22日 下午3:23:50
	 */
	public static String getNextYearMonth(String busiDate){
		
		StringBuffer s=new StringBuffer();
		//String[] strs=busiDate.split("-");
		int year=Integer.parseInt(busiDate.substring(0, 4));
		int month=Integer.parseInt(busiDate.substring(4, 6));
		String mon="";
		String day=busiDate.substring(6);
		if(month==12){//如果当月是12,则推到次年1月份
			month=1;
			year++;
		}else{
			month++;
		}
		if(month<10){
			mon="0"+month;
		}else{
			mon=""+month;
		}
		return (s.append(year).append("-").append(mon).append("-").append(day)).toString();
		
	}

	/**
	 * 获取字符串日期yyyy-MM-dd格式前一天
	 * @param timeString
	 * @return
	 */
	public static String getDateBefore(String timeString) throws ParseException{

		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		Calendar calendar = Calendar.getInstance(); //得到日历
		calendar.setTime(sdf.parse(timeString));//把当前时间赋给日历
		calendar.add(Calendar.DAY_OF_MONTH, -1);  //设置为前一天
		Date dBefore = calendar.getTime();   //得到前一天的时间
		return sdf.format(dBefore);    //格式化前一天

	}
	}

=========================================
结束语:温故而知新,可以为师矣

v :18612372242 欢迎交流学习

package com.hexiang.utils; /** * @(#)DateUtil.java * * * @author kidd * @version 1.00 2007/8/8 */ import java.util.*; import java.text.*; import java.sql.Timestamp; public class DateUtils { /** * 时间范围:年 */ public static final int YEAR = 1; /** * 时间范围:季度 */ public static final int QUARTER = 2; /** * 时间范围:月 */ public static final int MONTH = 3; /** * 时间范围:旬 */ public static final int TENDAYS = 4; /** * 时间范围:周 */ public static final int WEEK = 5; /** * 时间范围:日 */ public static final int DAY = 6; /* 基准时间 */ private Date fiducialDate = null; private Calendar cal = null; private DateUtils(Date fiducialDate) { if (fiducialDate != null) { this.fiducialDate = fiducialDate; } else { this.fiducialDate = new Date(System.currentTimeMillis()); } this.cal = Calendar.getInstance(); this.cal.setTime(this.fiducialDate); this.cal.set(Calendar.HOUR_OF_DAY, 0); this.cal.set(Calendar.MINUTE, 0); this.cal.set(Calendar.SECOND, 0); this.cal.set(Calendar.MILLISECOND, 0); this.fiducialDate = this.cal.getTime(); } /** * 获取DateHelper实例 * * @param fiducialDate * 基准时间 * @return Date */ public static DateUtils getInstance(Date fiducialDate) { return new DateUtils(fiducialDate); } /** * 获取DateHelper实例, 使用当前时间作为基准时间 * * @return Date */ public static DateUtils getInstance() { return new DateUtils(null); } /** * 获取年的第一天 * * @param offset * 偏移量 * @return Date */ public Date getFirstDayOfYear(int offset) { cal.setTime(this.fiducialDate); cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + offset); cal.set(Calendar.MONTH, Calendar.JANUARY); cal.set(Calendar.DAY_OF_MONTH, 1); return cal.getTime(); } /** * 获取年的最后一天 * * @param offset * 偏移量 * @return Date */ public Date getLastDayOfYear(int offset) { cal.setTime(this.fiducialDate); cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + offset); cal.set(Calendar.MONTH, Calendar.DECEMBER); cal.set(Calendar.DAY_OF_MONTH, 31); return cal.getTime(); } /** * 获取季度的第一天 * * @param offset * 偏移量 * @return Date */ public Date getFirstDayOfQuarter(int offset) { cal.setTime(this.fiducialDate); cal.add(Calendar.MONTH, offset * 3); int mon = cal.get(Calendar.MONTH); if (mon >= Calendar.JANUARY && mon = Calendar.APRIL && mon = Calendar.JULY && mon = Calendar.OCTOBER && mon = Calendar.JANUARY && mon = Calendar.APRIL && mon = Calendar.JULY && mon = Calendar.OCTOBER && mon = 21) { day = 21; } else if (day >= 11) { day = 11; } else { day = 1; } if (offset > 0) { day = day + 10 * offset; int monOffset = day / 30; day = day % 30; cal.add(Calendar.MONTH, monOffset); cal.set(Calendar.DAY_OF_MONTH, day); } else { int monOffset = 10 * offset / 30; int dayOffset = 10 * offset % 30; if ((day + dayOffset) > 0) { day = day + dayOffset; } else { monOffset = monOffset - 1; day = day - dayOffset - 10; } cal.add(Calendar.MONTH, monOffset); cal.set(Calendar.DAY_OF_MONTH, day); } return cal.getTime(); } /** * 获取旬的最后一天 * * @param offset * 偏移量 * @return Date */ public Date getLastDayOfTendays(int offset) { Date date = getFirstDayOfTendays(offset + 1); cal.setTime(date); cal.add(Calendar.DAY_OF_MONTH, -1); return cal.getTime(); } /** * 获取周的第一天(MONDAY) * * @param offset * 偏移量 * @return Date */ public Date getFirstDayOfWeek(int offset) { cal.setTime(this.fiducialDate); cal.add(Calendar.DAY_OF_MONTH, offset * 7); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); return cal.getTime(); } /** * 获取周的最后一天(SUNDAY) * * @param offset * 偏移量 * @return Date */ public Date getLastDayOfWeek(int offset) { cal.setTime(this.fiducialDate); cal.add(Calendar.DAY_OF_MONTH, offset * 7); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); cal.add(Calendar.DAY_OF_MONTH, 6); return cal.getTime(); } /** * 获取指定时间范围的第一天 * * @param dateRangeType * 时间范围类型 * @param offset * 偏移量 * @return Date */ public Date getFirstDate(int dateRangeType, int offset) { return null; } /** * 获取指定时间范围的最后一天 * * @param dateRangeType * 时间范围类型 * @param offset * 偏移量 * @return Date */ public Date getLastDate(int dateRangeType, int offset) { return null; } /** * 根据日历的规则,为基准时间添加指定日历字段的时间量 * * @param field * 日历字段, 使用Calendar类定义的日历字段常量 * @param offset * 偏移量 * @return Date */ public Date add(int field, int offset) { cal.setTime(this.fiducialDate); cal.add(field, offset); return cal.getTime(); } /** * 根据日历的规则,为基准时间添加指定日历字段的单个时间单元 * * @param field * 日历字段, 使用Calendar类定义的日历字段常量 * @param up * 指定日历字段的值的滚动方向。true:向上滚动 / false:向下滚动 * @return Date */ public Date roll(int field, boolean up) { cal.setTime(this.fiducialDate); cal.roll(field, up); return cal.getTime(); } /** * 把字符串转换为日期 * * @param dateStr * 日期字符串 * @param format * 日期格式 * @return Date */ public static Date strToDate(String dateStr, String format) { Date date = null; if (dateStr != null && (!dateStr.equals(""))) { DateFormat df = new SimpleDateFormat(format); try { date = df.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } } return date; } /** * 把字符串转换为日期,日期的格式为yyyy-MM-dd HH:ss * * @param dateStr * 日期字符串 * @return Date */ public static Date strToDate(String dateStr) { Date date = null; if (dateStr != null && (!dateStr.equals(""))) { if (dateStr.matches("\\d{4}-\\d{1,2}-\\d{1,2}")) { dateStr = dateStr + " 00:00"; } else if (dateStr.matches("\\d{4}-\\d{1,2}-\\d{1,2} \\d{1,2}")) { dateStr = dateStr + ":00"; } else { System.out.println(dateStr + " 格式不正确"); return null; } DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:ss"); try { date = df.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } } return date; } /** * 把日期转换为字符串 * * @param date * 日期实例 * @param format * 日期格式 * @return Date */ public static String dateToStr(Date date, String format) { return (date == null) ? "" : new SimpleDateFormat(format).format(date); } public static String dateToStr(Date date) { return (date == null) ? "" : new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(date); } /** * 取得当前日期 年-月-日 * * @return Date */ public static String getCurrentDate() { DateFormat f = new SimpleDateFormat("yyyy-MM-dd"); return f.format(Calendar.getInstance().getTime()); } public static void main(String[] args) { DateUtils dateHelper = DateUtils.getInstance(); /* Year */ for (int i = -5; i <= 5; i++) { System.out.println("FirstDayOfYear(" + i + ") = " + dateHelper.getFirstDayOfYear(i)); System.out.println("LastDayOfYear(" + i + ") = " + dateHelper.getLastDayOfYear(i)); } /* Quarter */ for (int i = -5; i <= 5; i++) { System.out.println("FirstDayOfQuarter(" + i + ") = " + dateHelper.getFirstDayOfQuarter(i)); System.out.println("LastDayOfQuarter(" + i + ") = " + dateHelper.getLastDayOfQuarter(i)); } /* Month */ for (int i = -5; i <= 5; i++) { System.out.println("FirstDayOfMonth(" + i + ") = " + dateHelper.getFirstDayOfMonth(i)); System.out.println("LastDayOfMonth(" + i + ") = " + dateHelper.getLastDayOfMonth(i)); } /* Week */ for (int i = -5; i <= 5; i++) { System.out.println("FirstDayOfWeek(" + i + ") = " + dateHelper.getFirstDayOfWeek(i)); System.out.println("LastDayOfWeek(" + i + ") = " + dateHelper.getLastDayOfWeek(i)); } /* Tendays */ for (int i = -5; i <= 5; i++) { System.out.println("FirstDayOfTendays(" + i + ") = " + dateHelper.getFirstDayOfTendays(i)); System.out.println("LastDayOfTendays(" + i + ") = " + dateHelper.getLastDayOfTendays(i)); } } /** * 取当前日期的字符串形式,"XXXX年XX月XX日" * * @return java.lang.String */ public static String getPrintDate() { String printDate = ""; Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); printDate += calendar.get(Calendar.YEAR) + "年"; printDate += (calendar.get(Calendar.MONTH) + 1) + "月"; printDate += calendar.get(Calendar.DATE) + "日"; return printDate; } /** * 将指定的日期字符串转化为日期对象 * * @param dateStr * 日期字符串 * @return java.util.Date */ public static Date getDate(String dateStr, String format) { if (dateStr == null) { return new Date(); } if (format == null) { format = "yyyy-MM-dd"; } SimpleDateFormat sdf = new SimpleDateFormat(format); try { Date date = sdf.parse(dateStr); return date; } catch (Exception e) { return null; } } /** * 从指定Timestamp中得到相应的日期的字符串形式 日期"XXXX-XX-XX" * * @param dateTime * @return 、String */ public static String getDateFromDateTime(Timestamp dateTime) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(dateTime).toString(); } /** * 得到当前时间 return java.sql.Timestamp * * @return Timestamp */ public static Timestamp getNowTimestamp() { long curTime = System.currentTimeMillis(); return new Timestamp(curTime); } }
package com.hexiang.utils; import java.text.SimpleDateFormat; import java.util.*; public class CalendarUtil { public static void main(String args[]) { System.out.println("First day of week is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getFirstDateByWeek(new Date()))); System.out.println("Last day of week is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getLastDateByWeek(new Date()))); System.out.println("First day of month is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getFirstDateByMonth(new Date()))); System.out.println("Last day of month is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getLastDateByMonth(new Date()))); } /** * 获得所在星期的第一天 */ public static Date getFirstDateByWeek(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); int today = now.get(Calendar.DAY_OF_WEEK); int first_day_of_week = now.get(Calendar.DATE) + 2 - today; // 星期一 now.set(Calendar.DATE, first_day_of_week); return now.getTime(); } /** * 获得所在星期的最后一天 */ public static Date getLastDateByWeek(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); int today = now.get(Calendar.DAY_OF_WEEK); int first_day_of_week = now.get(Calendar.DATE) + 2 - today; // 星期一 int last_day_of_week = first_day_of_week + 6; // 星期日 now.set(Calendar.DATE, last_day_of_week); return now.getTime(); } /** * 获得所在月份的最后一天 * @param 当前月份所在的时间 * @return 月份的最后一天 */ public static Date getLastDateByMonth(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); now.set(Calendar.MONTH, now.get(Calendar.MONTH) + 1); now.set(Calendar.DATE, 1); now.set(Calendar.DATE, now.get(Calendar.DATE) - 1); now.set(Calendar.HOUR, 11); now.set(Calendar.MINUTE, 59); now.set(Calendar.SECOND, 59); return now.getTime(); } /** * 获得所在月份的第一天 * @param 当前月份所在的时间 * @return 月份的第一天 */ public static Date getFirstDateByMonth(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); now.set(Calendar.DATE, 0); now.set(Calendar.HOUR, 12); now.set(Calendar.MINUTE, 0); now.set(Calendar.SECOND, 0); return now.getTime(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知乎关注八戒来了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值