日期工具类

2 篇文章 0 订阅
1 篇文章 0 订阅
package bl_new.xmgl.comm;

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

public class DateTool {
	/**
	* @description 获取当前系统时间
	* @author 野绅士
	* @param formate
	* @return
	* @date 2014-5-21
	*/
	public static String getCurrDate(String formate){
		SimpleDateFormat sf = new SimpleDateFormat(formate);
		return sf.format(new Date());
	}

	public static Calendar getCalendar(Date date)
	{
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal;
	}

	/**
	 * 得到当前的日期时间
	 * 
	 * @param pattern
	 *            时间样式
	 * @return 返回当前日期的字符串
	 */
	public static String getCurrentDate(String pattern)
	{
		java.util.Date date = new java.util.Date();

		String s = dateToStr(date, pattern);
		return s;
	}

	/**
	 * 把一个字符串(一定要保证是正确日期)转化成Java的Date类 如果失败返回null 如果格式不支持请将格式增加到datePattern中
	 * 
	 * @param source
	 *            传入的日期字符串
	 * @return Date
	 */
	public static Date parseDate(String source)
	{
		if (source == null || source.length() == 0)
			return null;
		String[] datePattern =
		{ "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd", "HH:mm:ss" };
		Date date = null;
		for (int i = 0; i < datePattern.length; i++)
		{
			date = parseDate(source, datePattern[i]);
			if (date != null)
				break;
		}
		datePattern = null;
		return date;
	}
	
	public static java.sql.Date parseSqlDate(String pattern){
		Date date = parseDate(pattern);
		java.sql.Date returnV;
		returnV = new java.sql.Date(date.getTime());
		return returnV;
	}

	/**
	 * 把一个指定格式的日期字符串转化成Java的Date类 如果失败返回null
	 * 
	 * @param source
	 *            传入的日期字符串
	 * @param format
	 *            日期的格式
	 * @return Date
	 */
	public static Date parseDate(String dateStr, String format)
	{
		SimpleDateFormat dateFormat = new SimpleDateFormat(format);
		Date date = null;

		try
		{
			date = dateFormat.parse(dateStr);
		} catch (ParseException e)
		{
			// do nothing.
		}

		return date;
	}

	/**
	 * 返回两个日期的天数差值
	 * 
	 * @param end
	 *            结束日期
	 * @param start
	 *            开始日期
	 * @return
	 */
	public static int diffDate(java.util.Date end, java.util.Date start)
	{
		return (int) (getMillis(end) / (24 * 3600 * 1000) - getMillis(start)
				/ (24 * 3600 * 1000));
	}
	
	/**
	 * 返回两个日期的分钟
	 * 
	 * @param end
	 *            结束日期
	 * @param start
	 *            开始日期
	 * @return
	 */
	public static long diffSecond(Date end, Date start)
	{
		return (getMillis(end) - getMillis(start)) / 1000;
	}

	/**
	 * 返回两个日期的秒数
	 * 
	 * @param end
	 *            结束日期
	 * @param start
	 *            开始日期
	 * @return
	 */
	public static long diffMinute(Date end, Date start)
	{
		return (getMillis(end) - getMillis(start)) / (1000*60);
	}

	/**
	 * 返回UTC milliseconds
	 * 
	 * @param date
	 *            日期
	 * @return
	 */
	public static long getMillis(java.util.Date date)
	{
		java.util.Calendar c = java.util.Calendar.getInstance();
		c.setTime(date);
		return c.getTimeInMillis();
	}

	/**
	 * 返回yyyy-MM-dd HH:mm:ss格式的当前日期
	 * 
	 * @return
	 */
	public static String getNow()
	{
		Date now = new Date();
		return formatDateTime(now);
	}
	
	public static Date getDateNow()
	{
		Date now = new Date();
		return now;
	}

	/**
	 * 返回指定格式的当前日期
	 * 
	 * @param pattern格式
	 * @return
	 */
	public static String getNow(String pattern)
	{
		Date now = new Date();
		return formatDate(now, pattern);
	}

	/**
	 * 把Java时间类型的字符串格式化为指定格式的字符串
	 * 
	 * @param date
	 *            待转化的字符串
	 * @return 返回格式化好的字符串.
	 */
	public static String formatDate(String dateStr, String pattern)
	{
		Date date = parseDate(dateStr);
		return formatDate(date, pattern);
	}

	/**
	 * 把Java时间类型Date按"HH:mm:ss"格式化为字符串
	 * 
	 * @param date
	 *            待转化的Date
	 * @return 返回格式化好的字符串.
	 */
	public static String formatTime(Date date)
	{
		String pattern = "HH:mm:ss";
		return formatDate(date, pattern);
	}

	/**
	 * 把Java时间类型Date按"yyyy-MM-dd"格式化为字符串
	 * 
	 * @param date
	 *            待转化的Date
	 * @return 返回格式化好的字符串.
	 */
	public static String formatDate(Date date)
	{
		String pattern = "yyyy-MM-dd";
		return formatDate(date, pattern);
	}

	/**
	 * 把Java时间类型Date按"yyyy-MM-dd HH:mm:ss"格式化为字符串
	 * 
	 * @param date
	 *            待转化的Date
	 * @return 返回格式化好的字符串.
	 */
	public static String formatDateTime(Date date)
	{
		String pattern = "yyyy-MM-dd HH:mm:ss";
		return formatDate(date, pattern);
	}

	/**
	 * 把Java时间类型Date按指定的样式格式化为字符串
	 * 
	 * @param date
	 *            待转化的Date
	 * @param pattern
	 *            转化的样式
	 * @return 返回格式化好的字符串.
	 */
	public static String formatDate(Date date, String pattern)
	{
		String dateTimePattern = pattern;

		if (date == null)
		{
			if (dateTimePattern.length() > 2
					&& dateTimePattern.substring(dateTimePattern.length() - 2)
							.equals("_e"))
			{
				dateTimePattern = dateTimePattern.replaceAll("(yy|YY){1,2}",
						"        ");
				dateTimePattern = dateTimePattern
						.replaceAll("(M){1,2}", "    ");
				dateTimePattern = dateTimePattern.replaceAll("(d|D){1,2}",
						"    ");
				dateTimePattern = dateTimePattern.replaceAll("(h|H){1,2}",
						"    ");
				dateTimePattern = dateTimePattern
						.replaceAll("(m){1,2}", "    ");
				dateTimePattern = dateTimePattern.replaceAll("(s|S){1,2}",
						"    ");

				return dateTimePattern.substring(0,
						dateTimePattern.length() - 2);
			} else
			{
				return "";
			}
		} else
		{
			if (dateTimePattern.length() > 2
					&& dateTimePattern.substring(dateTimePattern.length() - 2)
							.equals("_e"))
			{
				dateTimePattern = dateTimePattern.substring(0, dateTimePattern
						.length() - 2);
			}
		}

		if (dateTimePattern == null || dateTimePattern.length() == 0)
			return formatDateTime(date);

		SimpleDateFormat sdf = new SimpleDateFormat();
		try
		{
			sdf.applyPattern(dateTimePattern);
		} catch (IllegalArgumentException exp)
		{
			sdf.applyPattern("yyyy-MM-dd HH:mm:ss");
		}
		return sdf.format(date);
	}

	/**
	 * 得到当前年份整数
	 * 
	 * @return 当前的年份
	 */
	public static int getCurrYear()
	{
		Calendar cal = Calendar.getInstance();
		return cal.get(Calendar.YEAR);
	}

	/**
	 * 得到当前的月份整数
	 * 
	 * @return 当前的月份
	 */
	public static int getCurrMonth()
	{
		Calendar cal = Calendar.getInstance();
		return cal.get(Calendar.MONTH) + 1;
	}

	/**
	 * 得到当前时间的星期
	 * 
	 * @return 当前所在月的年哪一天
	 */
	public static String getCurrtWeekDay()
	{
		Date date = new Date();
		String[] weekDays =
		{ "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
		if (w < 0)
			w = 0;
		return weekDays[w];
	}

	/**
	 * 得到当前所在月的那一天整数
	 * 
	 * @return 当前所在月的年哪一天
	 */
	public static int getCurrDay()
	{
		Calendar cal = Calendar.getInstance();
		return cal.get(Calendar.DATE);
	}

	/**
	 * 取得传入日期是多少周
	 * 
	 * @param date
	 * @return 第几周
	 */
	public static int getWeekOfYear(Date date)
	{
		Calendar c = new GregorianCalendar();
		c.setFirstDayOfWeek(Calendar.MONDAY);
		c.setMinimalDaysInFirstWeek(7);
		c.setTime(date);

		return c.get(Calendar.WEEK_OF_YEAR);
	}

	/**
	 * 取得当前日期是多少周
	 * 
	 * @return 第几周
	 */
	public static int getWeekOfYear()
	{
		return getWeekOfYear(new Date());
	}

	/**
	 * 得到某一年周的总数
	 * 
	 * @param year
	 * @return 某一年周的总数
	 */
	public static int getMaxWeekNumOfYear(int year)
	{
		Calendar c = new GregorianCalendar();
		c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);

		return getWeekOfYear(c.getTime());
	}

	/**
	 * 得到某年某周的第一天
	 * 
	 * @param year
	 * @param week
	 * @return 某年某周的第一天
	 */
	public static Date getFirstDayOfWeek(int year, int week)
	{
		Calendar c = new GregorianCalendar();
		c.set(Calendar.YEAR, year);
		c.set(Calendar.MONTH, Calendar.JANUARY);
		c.set(Calendar.DATE, 1);

		Calendar cal = (GregorianCalendar) c.clone();
		cal.add(Calendar.DATE, week * 7);

		return getFirstDayOfWeek(cal.getTime());
	}
	/**
	 * 功能: 将插入的字符串按格式转换成对应的日期对象
	 * @param str 字符串
	 * @param pattern	格式
	 * @return Date
	 */
	public static Date StringToDate(String str, String pattern) {
		Date dateTime = null;
		try {
			if (str != null && !str.equals("")) {
				SimpleDateFormat formater = new SimpleDateFormat(pattern);
				dateTime = formater.parse(str);
			}
		} catch (Exception ex) {
		}
		return dateTime;
	}
	/**
	 * 得到某年某周的最后一天
	 * 
	 * @param year
	 * @param week
	 * @return 某年某周的最后一天
	 */
	public static Date getLastDayOfWeek(int year, int week)
	{
		Calendar c = new GregorianCalendar();
		c.set(Calendar.YEAR, year);
		c.set(Calendar.MONTH, Calendar.JANUARY);
		c.set(Calendar.DATE, 1);

		Calendar cal = (GregorianCalendar) c.clone();
		cal.add(Calendar.DATE, week * 7);

		return getLastDayOfWeek(cal.getTime());
	}

	/**
	 * 取得当前日期所在周的第一天
	 * 
	 * @param date
	 * @return 当前日期所在周的第一天
	 */
	public static Date getFirstDayOfWeek(Date date)
	{
		Calendar c = new GregorianCalendar();
		c.setFirstDayOfWeek(Calendar.MONDAY);
		c.setTime(date);
		c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
		return c.getTime();
	}

	/**
	 * 取得当前日期所在周的最后一天
	 * 
	 * @param date
	 * @return 当前日期所在周的最后一天
	 */
	public static Date getLastDayOfWeek(Date date)
	{
		Calendar c = new GregorianCalendar();
		c.setFirstDayOfWeek(Calendar.MONDAY);
		c.setTime(date);
		c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
		return c.getTime();
	}

	/**
	 * 取得某年某月第一周开始日期
	 * 
	 * @param date
	 * @return
	 */
	public static Date getFirstDayOfFirstWeek(int year, int month)
	{
		Calendar c = Calendar.getInstance();
		c.setFirstDayOfWeek(Calendar.MONDAY);
		c.set(year, month, 1);

		c.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1);
		c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

		return c.getTime();
	}

	/**
	 * 取得昨天日期
	 * 
	 * @param date
	 * @return
	 */
	public static Date getYesterday()
	{
		Calendar c = new GregorianCalendar();
		c.set(Calendar.DATE, c.get(Calendar.DATE) - 1);
		Date date = c.getTime();
		return date;
	}

	/**
	 * 取得明天日期
	 * 
	 * @param date
	 * @return
	 */
	public static Date getTomorrow()
	{
		Calendar c = new GregorianCalendar();
		c.set(Calendar.DATE, c.get(Calendar.DATE) + 1);
		Date date = c.getTime();
		return date;
	}

	/**
	 * 将指定日期的月份减一
	 * 
	 * @param date
	 * @return
	 */
	public static Date getPreMonth(Date date)
	{
		GregorianCalendar c = new GregorianCalendar();
		c.setTime(date);
		c.add(Calendar.MONTH, -1);
		return c.getTime();
	}
	/**
	 * 将指定日期的月份加一
	 * 
	 * @param date
	 * @return
	 */
	public static Date getAddMonth(Date date)
	{
		GregorianCalendar c = new GregorianCalendar();
		c.setTime(date);
		c.add(Calendar.MONTH, +1);
		return c.getTime();
	}
	
	/**
	 * 将指定日期的月份加一
	 * 
	 * @param date
	 * @return
	 */
	public static String getAddMonthString()
	{
		Date date = new Date();
		GregorianCalendar c = new GregorianCalendar();
		c.setTime(date);
		c.add(Calendar.MONTH, +1);
		return formatDateTime(c.getTime());
	}
	
	/**
	 * 返回季度
	 * 
	 * @param date
	 * @return
	 */
	@SuppressWarnings("deprecation")
	public static int getQuarter(Date date)
	{
		int month = date.getMonth();
		if (month < 3)
		{
			return 1;
		} else if (month < 6)
		{
			return 2;
		} else if (month < 9)
		{
			return 3;
		} else
		{
			return 4;
		}
	}
	
	/**
	 * 返回当前季度
	 * wtc
	 * @param date
	 * @return
	 */
	public static int getCurrentQuarter()
	{
		java.util.Date date = new java.util.Date();
		return getQuarter(date);
	}

	/**
	 * 比较两个日期之间相差的天数
	 * 
	 * @param strDate1
	 * @param strDate2
	 * @return
	 */
	public static int getDayCountByTwoDates(String strDate1, String strDate2)
	{
		int differ = 0;
		try
		{
			SimpleDateFormat format = new SimpleDateFormat(
					"yyyy-MM-dd hh:mm:ss");
			Date date1 = format.parse(strDate1);
			Date date2 = format.parse(strDate2);
			differ = (int) ((date1.getTime() - date2.getTime()) / (24 * 60 * 60 * 1000));
			format = null;
		} catch (Exception e)
		{
			differ = -1;
		}

		return differ;
	}

	/**
	 * 比较两个日期之间相差的天数
	 * 
	 * @param strDate1
	 * @param strDate2
	 * @return
	 */
	public static float getDayCountFloatByTwoDates(String strDate1,
			String strDate2)
	{
		float differ = 0;
		try
		{
			SimpleDateFormat format = new SimpleDateFormat(
					"yyyy-MM-dd hh:mm:ss");
			Date date1 = format.parse(strDate1);
			Date date2 = format.parse(strDate2);
			BigDecimal b1 = new BigDecimal(date1.getTime() + "");
			BigDecimal b2 = new BigDecimal(date2.getTime() + "");
			double b3 = b1.subtract(b2).doubleValue();
			BigDecimal b4 = new BigDecimal(b3);
			BigDecimal b5 = new BigDecimal((24 * 60 * 60 * 1000) + "");
			double result = b4.divide(b5, 10, BigDecimal.ROUND_DOWN)
					.doubleValue();
			// double result =
			// b1.divide(b2,10,BigDecimal.ROUND_DOWN).doubleValue();
			differ = Float.parseFloat(result + "");
		} catch (Exception e)
		{
			differ = -1;
		}

		return differ;
	}

	/**
	 * 把Java时间类型Date按指定的样式格式化为字符串
	 * 
	 * @param date
	 *            待转化的Date
	 * @param pattern
	 *            转化的样式
	 * @return 返回格式化好的字符串.
	 */
	public static String dateToStr(java.util.Date date, String pattern)
	{
		if (date == null)
			return "";

		String pat = pattern;

		if (pat == null || pat.length() == 0)
			pat = "yyyy-MM-dd HH:mm:ss";

		SimpleDateFormat sdf = new SimpleDateFormat(pat);

		return sdf.format(date);
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值