`
fei089
  • 浏览: 6257 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

DATE 工具类

    博客分类:
  • java
阅读更多
public class DateUtil
{
	//默认显示日期的格式
	public static final String DATAFORMAT_STR = "yyyy-MM-dd";
	
	//默认显示日期的格式
	public static final String YYYY_MM_DATAFORMAT_STR = "yyyy-MM";
	
	//默认显示日期时间的格式
	public static final String DATATIMEF_STR = "yyyy-MM-dd HH:mm:ss";
	
	//默认显示简体中文日期的格式
	public static final String ZHCN_DATAFORMAT_STR = "yyyy年MM月dd日";
	
	//默认显示简体中文日期时间的格式
	public static final String ZHCN_DATATIMEF_STR = "yyyy年MM月dd日HH时mm分ss秒";
	
	//默认显示简体中文日期时间的格式
	public static final String ZHCN_DATATIMEF_STR_4yMMddHHmm = "yyyy年MM月dd日HH时mm分";
	
	private static DateFormat dateFormat = null;
	
	private static DateFormat dateTimeFormat = null;
	
	private static DateFormat zhcnDateFormat = null;
	
	private static DateFormat zhcnDateTimeFormat = null;
	static
	{
		dateFormat = new SimpleDateFormat(DATAFORMAT_STR);
		dateTimeFormat = new SimpleDateFormat(DATATIMEF_STR);
		zhcnDateFormat = new SimpleDateFormat(ZHCN_DATAFORMAT_STR);
		zhcnDateTimeFormat = new SimpleDateFormat(ZHCN_DATATIMEF_STR);
	}
	
	private static DateFormat getDateFormat(String formatStr)
	{
		if (formatStr.equalsIgnoreCase(DATAFORMAT_STR))
		{
			return dateFormat;
		}
		else
			if (formatStr.equalsIgnoreCase(DATATIMEF_STR))
			{
				return dateTimeFormat;
			}
			else
				if (formatStr.equalsIgnoreCase(ZHCN_DATAFORMAT_STR))
				{
					return zhcnDateFormat;
				}
				else
					if (formatStr.equalsIgnoreCase(ZHCN_DATATIMEF_STR))
					{
						return zhcnDateTimeFormat;
					}
					else
					{
						return new SimpleDateFormat(formatStr);
					}
	}
	
	/**
	 * 按照默认显示日期时间的格式"yyyy-MM-dd HH:mm:ss",转化dateTimeStr为Date类型
	 * dateTimeStr必须是"yyyy-MM-dd HH:mm:ss"的形式
	 * @param dateTimeStr
	 * @return
	 */
	public static Date getDate(String dateTimeStr)
	{
		return getDate(dateTimeStr, DATATIMEF_STR);
	}
	
	/**
	 * 按照默认formatStr的格式,转化dateTimeStr为Date类型
	 * dateTimeStr必须是formatStr的形式
	 * @param dateTimeStr
	 * @param formatStr
	 * @return
	 */
	public static Date getDate(String dateTimeStr, String formatStr)
	{
		try
		{
			if (dateTimeStr == null || dateTimeStr.equals(""))
			{
				return null;
			}
			DateFormat sdf = getDateFormat(formatStr);
			java.util.Date d = sdf.parse(dateTimeStr);
			return d;
		}
		catch (ParseException e)
		{
			throw new RuntimeException(e);
		}
	}
	
	/**
	 * 将YYYYMMDD转换成Date日期
	 * @param date
	 * @return
	 * @throws BusinessException
	 */
	public static Date transferDate(String date) throws Exception
	{
		if (date == null || date.length() < 1)
			return null;
		
		if (date.length() != 8)
			throw new Exception("日期格式错误");
		String con = "-";
		
		String yyyy = date.substring(0, 4);
		String mm = date.substring(4, 6);
		String dd = date.substring(6, 8);
		
		int month = Integer.parseInt(mm);
		int day = Integer.parseInt(dd);
		if (month < 1 || month > 12 || day < 1 || day > 31)
			throw new Exception("日期格式错误");
		
		String str = yyyy + con + mm + con + dd;
		return DateUtil.getDate(str, DateUtil.DATAFORMAT_STR);
	}
	
	/**
	 * 将YYYY-MM-DD日期转换成yyyymmdd格式字符串
	 * @param date
	 * @return
	 */
	public static String getYYYYMMDDDate(Date date)
	{
		if (date == null)
			return null;
		String yyyy = getYear(date) + "";
		String mm = getMonth(date) + "";
		String dd = getDay(date) + "";
		
		mm = StringUtil.rightAlign(mm, 2, "0");
		dd = StringUtil.rightAlign(dd, 2, "0");
		return yyyy + mm + dd;
	}
	
	/**
	 * 将YYYY-MM-DD日期转换成YYYYMMDDHHMMSS格式字符串
	 * @param date
	 * @return
	 */
	public static String getYYYYMMDDHHMMSSDate(Date date)
	{
		if (date == null)
			return null;
		String yyyy = getYear(date) + "";
		String mm = getMonth(date) + "";
		String dd = getDay(date) + "";
		String hh = getHour(date) + "";
		String min = getMin(date) + "";
		String ss = getSecond(date) + "";
		
		mm = StringUtil.rightAlign(mm, 2, "0");
		dd = StringUtil.rightAlign(dd, 2, "0");
		hh = StringUtil.rightAlign(hh, 2, "0");
		min = StringUtil.rightAlign(min, 2, "0");
		ss = StringUtil.rightAlign(ss, 2, "0");
		
		return yyyy + mm + dd + hh + min + ss;
	}
	
	/**
	 * 将YYYY-MM-DD日期转换成yyyymmdd格式字符串
	 * @param date
	 * @return
	 */
	public static String getYYYYMMDDDate(String date)
	{
		return getYYYYMMDDDate(getDate(date, DATAFORMAT_STR));
	}
	
	/**
	 * 将Date转换成字符串“yyyy-mm-dd hh:mm:ss”的字符串
	 * @param date
	 * @return
	 */
	public static String dateToDateString(Date date)
	{
		return dateToDateString(date, DATATIMEF_STR);
	}
	
	/**
	 * 将Date转换成formatStr格式的字符串
	 * @param date
	 * @param formatStr
	 * @return
	 */
	public static String dateToDateString(Date date, String formatStr)
	{
		DateFormat df = getDateFormat(formatStr);
		return df.format(date);
	}
	
	/**
	 * 返回一个yyyy-MM-dd HH:mm:ss 形式的日期时间字符串中的HH:mm:ss
	 * @param dateTime
	 * @return
	 */
	public static String getTimeString(String dateTime)
	{
		return getTimeString(dateTime, DATATIMEF_STR);
	}
	
	/**
	 * 返回一个formatStr格式的日期时间字符串中的HH:mm:ss
	 * @param dateTime
	 * @param formatStr
	 * @return
	 */
	public static String getTimeString(String dateTime, String formatStr)
	{
		Date d = getDate(dateTime, formatStr);
		String s = dateToDateString(d);
		return s.substring(DATATIMEF_STR.indexOf('H'));
	}
	
	/**
	 * 获取当前日期yyyy-MM-dd的形式
	 * @return
	 */
	public static String getCurDate()
	{
		//return dateToDateString(new Date(),DATAFORMAT_STR);
		return dateToDateString(Calendar.getInstance().getTime(), DATAFORMAT_STR);
	}
	
	/**
	 * 获取当前日期yyyy年MM月dd日的形式
	 * @return
	 */
	public static String getCurZhCNDate()
	{
		return dateToDateString(new Date(), ZHCN_DATAFORMAT_STR);
	}
	
	/**
	 * 获取当前日期时间yyyy-MM-dd HH:mm:ss的形式
	 * @return
	 */
	public static String getCurDateTime()
	{
		return dateToDateString(new Date(), DATATIMEF_STR);
	}
	
	/**
	 * 获取当前日期时间yyyy年MM月dd日HH时mm分ss秒的形式
	 * @return
	 */
	public static String getCurZhCNDateTime()
	{
		return dateToDateString(new Date(), ZHCN_DATATIMEF_STR);
	}
	
	/**
	 * 获取日期d的days天后的一个Date
	 * @param d
	 * @param days
	 * @return
	 */
	public static Date getInternalDateByDay(Date d, int days)
	{
		Calendar now = Calendar.getInstance(TimeZone.getDefault());
		now.setTime(d);
		now.add(Calendar.DATE, days);
		return now.getTime();
	}
	
	public static Date getInternalDateByMon(Date d, int months)
	{
		Calendar now = Calendar.getInstance(TimeZone.getDefault());
		now.setTime(d);
		now.add(Calendar.MONTH, months);
		return now.getTime();
	}
	
	public static Date getInternalDateByYear(Date d, int years)
	{
		Calendar now = Calendar.getInstance(TimeZone.getDefault());
		now.setTime(d);
		now.add(Calendar.YEAR, years);
		return now.getTime();
	}
	
	public static Date getInternalDateBySec(Date d, int sec)
	{
		Calendar now = Calendar.getInstance(TimeZone.getDefault());
		now.setTime(d);
		now.add(Calendar.SECOND, sec);
		return now.getTime();
	}
	
	public static Date getInternalDateByMin(Date d, int min)
	{
		Calendar now = Calendar.getInstance(TimeZone.getDefault());
		now.setTime(d);
		now.add(Calendar.MINUTE, min);
		return now.getTime();
	}
	
	public static Date getInternalDateByHour(Date d, int hours)
	{
		Calendar now = Calendar.getInstance(TimeZone.getDefault());
		now.setTime(d);
		now.add(Calendar.HOUR_OF_DAY, hours);
		return now.getTime();
	}
	
	/**
	 * 根据一个日期字符串,返回日期格式,目前支持4种
	 * 如果都不是,则返回null
	 * @param DateString
	 * @return
	 */
	public static String getFormateStr(String DateString)
	{
		String patternStr1 = "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"; //"yyyy-MM-dd"
		String patternStr2 = "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}\\s[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}"; //"yyyy-MM-dd HH:mm:ss";
		String patternStr3 = "[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日";//"yyyy年MM月dd日"
		String patternStr4 = "[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日[0-9]{1,2}时[0-9]{1,2}分[0-9]{1,2}秒";//"yyyy年MM月dd日HH时mm分ss秒"
		
		Pattern p = Pattern.compile(patternStr1);
		Matcher m = p.matcher(DateString);
		boolean b = m.matches();
		if (b)
			return DATAFORMAT_STR;
		p = Pattern.compile(patternStr2);
		m = p.matcher(DateString);
		b = m.matches();
		if (b)
			return DATATIMEF_STR;
		
		p = Pattern.compile(patternStr3);
		m = p.matcher(DateString);
		b = m.matches();
		if (b)
			return ZHCN_DATAFORMAT_STR;
		
		p = Pattern.compile(patternStr4);
		m = p.matcher(DateString);
		b = m.matches();
		if (b)
			return ZHCN_DATATIMEF_STR;
		return null;
	}
	
	/**
	 * 将一个"yyyy-MM-dd HH:mm:ss"字符串,转换成"yyyy年MM月dd日HH时mm分ss秒"的字符串
	 * @param dateStr
	 * @return
	 */
	public static String getZhCNDateTime(String dateStr)
	{
		Date d = getDate(dateStr);
		return dateToDateString(d, ZHCN_DATATIMEF_STR);
	}
	
	/**
	 * 将一个"yyyy-MM-dd"字符串,转换成"yyyy年MM月dd日"的字符串
	 * @param dateStr
	 * @return
	 */
	public static String getZhCNDate(String dateStr)
	{
		Date d = getDate(dateStr, DATAFORMAT_STR);
		return dateToDateString(d, ZHCN_DATAFORMAT_STR);
	}
	
	/**
	 * 将dateStr从fmtFrom转换到fmtTo的格式
	 * @param dateStr
	 * @param fmtFrom
	 * @param fmtTo
	 * @return
	 */
	public static String getDateStr(String dateStr, String fmtFrom, String fmtTo)
	{
		Date d = getDate(dateStr, fmtFrom);
		return dateToDateString(d, fmtTo);
	}
	
	/**
	 * 比较两个"yyyy-MM-dd HH:mm:ss"格式的日期,之间相差多少毫秒,time2-time1
	 * @param time1
	 * @param time2
	 * @return
	 */
	public static long compareDateStr(String time1, String time2)
	{
		Date d1 = getDate(time1);
		Date d2 = getDate(time2);
		return d2.getTime() - d1.getTime();
	}
	
	/**
	 * 将小时数换算成返回以毫秒为单位的时间
	 * @param hours
	 * @return
	 */
	public static long getMicroSec(BigDecimal hours)
	{
		BigDecimal bd;
		bd = hours.multiply(new BigDecimal(3600 * 1000));
		return bd.longValue();
	}
	
	/**
	 * 获取Date中的分钟
	 * @param d
	 * @return
	 */
	public static int getMin(Date d)
	{
		Calendar now = Calendar.getInstance(TimeZone.getDefault());
		now.setTime(d);
		return now.get(Calendar.MINUTE);
	}
	
	/**
	 * 获取Date中的小时(24小时)
	 * @param d
	 * @return
	 */
	public static int getHour(Date d)
	{
		Calendar now = Calendar.getInstance(TimeZone.getDefault());
		now.setTime(d);
		return now.get(Calendar.HOUR_OF_DAY);
	}
	
	/**
	 * 获取Date中的秒
	 * @param d
	 * @return
	 */
	public static int getSecond(Date d)
	{
		Calendar now = Calendar.getInstance(TimeZone.getDefault());
		now.setTime(d);
		return now.get(Calendar.SECOND);
	}
	
	/**
	 * 获取xxxx-xx-xx的日
	 * @param d
	 * @return
	 */
	public static int getDay(Date d)
	{
		Calendar now = Calendar.getInstance(TimeZone.getDefault());
		now.setTime(d);
		return now.get(Calendar.DAY_OF_MONTH);
	}
	
	/**
	 * 获取月份,1-12月
	 * @param d
	 * @return
	 */
	public static int getMonth(Date d)
	{
		Calendar now = Calendar.getInstance(TimeZone.getDefault());
		now.setTime(d);
		return now.get(Calendar.MONTH) + 1;
	}
	
	/**
	 * 获取19xx,20xx形式的年
	 * @param d
	 * @return
	 */
	public static int getYear(Date d)
	{
		Calendar now = Calendar.getInstance(TimeZone.getDefault());
		now.setTime(d);
		return now.get(Calendar.YEAR);
	}
	
	/**
	 * 得到d的上个月的年份+月份,如200505
	 * @return
	 */
	public static String getYearMonthOfLastMon(Date d)
	{
		Date newdate = getInternalDateByMon(d, -1);
		String year = String.valueOf(getYear(newdate));
		String month = String.valueOf(getMonth(newdate));
		return year + month;
	}
	
	/**
	 * 得到当前日期的年和月如200509
	 * @return String
	 */
	public static String getCurYearMonth()
	{
		Calendar now = Calendar.getInstance(TimeZone.getDefault());
		String DATE_FORMAT = "yyyyMM";
		java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);
		sdf.setTimeZone(TimeZone.getDefault());
		return (sdf.format(now.getTime()));
	}
	
	public static Date getNextMonth(String year, String month)
	{
		String datestr = year + "-" + month + "-01";
		Date date = getDate(datestr, DATAFORMAT_STR);
		return getInternalDateByMon(date, 1);
	}
	
	public static Date getLastMonth(String year, String month)
	{
		String datestr = year + "-" + month + "-01";
		Date date = getDate(datestr, DATAFORMAT_STR);
		return getInternalDateByMon(date, -1);
	}
	
	/**
	 * 得到日期d,按照页面日期控件格式,如"2001-3-16"
	 * @param d
	 * @return
	 */
	public static String getSingleNumDate(Date d)
	{
		return dateToDateString(d, DATAFORMAT_STR);
	}
	
	/**
	 * 得到d半年前的日期,"yyyy-MM-dd"
	 * @param d
	 * @return
	 */
	public static String getHalfYearBeforeStr(Date d)
	{
		return dateToDateString(getInternalDateByMon(d, -6), DATAFORMAT_STR);
	}
	
	/**
	 * 得到当前日期D的月底的前/后若干天的时间,<0表示之前,>0表示之后
	 * @param d
	 * @param days
	 * @return
	 */
	public static String getInternalDateByLastDay(Date d, int days)
	{
		
		return dateToDateString(getInternalDateByDay(d, days), DATAFORMAT_STR);
	}
	
	/**
	 * 日期中的年月日相加
	 *  @param field int  需要加的字段  年 月 日
	 * @param amount int 加多少
	 * @return String
	 */
	public static String addDate(int field, int amount)
	{
		int temp = 0;
		if (field == 1)
		{
			temp = Calendar.YEAR;
		}
		if (field == 2)
		{
			temp = Calendar.MONTH;
		}
		if (field == 3)
		{
			temp = Calendar.DATE;
		}
		
		String Time = "";
		try
		{
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar cal = Calendar.getInstance(TimeZone.getDefault());
			cal.add(temp, amount);
			Time = sdf.format(cal.getTime());
			return Time;
		}
		catch (Exception e)
		{
			e.printStackTrace();
			return null;
		}
		
	}
	
	/**
	 * 获得系统当前月份的天数
	 * @return
	 */
	public static int getCurentMonthDay()
	{
		Date date = Calendar.getInstance().getTime();
		return getMonthDay(date);
	}
	
	/**
	 * 获得指定日期月份的天数
	 * @return
	 */
	public static int getMonthDay(Date date)
	{
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		return c.getActualMaximum(Calendar.DAY_OF_MONTH);
		
	}
	
	/**
	 * 获得指定日期月份的天数  yyyy-mm-dd
	 * @return
	 */
	public static int getMonthDay(String date)
	{
		Date strDate = getDate(date, DATAFORMAT_STR);
		return getMonthDay(strDate);
		
	}
	
	public static String getStringDate(Calendar cal)
	{
		
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		return format.format(cal.getTime());
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		//		//System.out.print(DateUtil.getDate("04:04:04","HH:mm:ss"));
		//		System.out.print("\n"+DateUtil.getCurZhCNDateTime());
		//		System.out.print("\n"+getFormateStr(DateUtil.getCurDate()));
		//		System.out.print("\n"+compareDateStr("1900-1-1 1:1:2","1900-1-1 1:1:3"));
		//		System.out.print("\n"+getDay(new Date()));
		//		System.out.print("\n"+getMonth(new Date()));
		//		System.out.print("\n"+getYear(new Date()));
		//		System.out.print("\n"+getMin(new Date()));
		////		System.out.print("\n"+new Date().getSeconds());
		/*Date d1 = new Date(2007,11,30);
		Date d2 = new Date(2007,12,1);
		if(d2.compareTo(d1)>0){
		    System.out.println("d2大于d1");
		}else{
		    System.out.println("d2小于d1");
		}*/

		System.out.println(addDate(1, 1));
		System.out.println(addDate(2, 1));
		System.out.println(addDate(3, 1));
		
		System.out.println(getYYYYMMDDHHMMSSDate(new Date()));
		
		System.out.println(getCurentMonthDay());
		
	}
	
}
分享到:
评论
3 楼 雁行 2009-06-25  
谢谢,准备用。
函数很长,好像部分函数可以重构一下
比如:
getYYYYMMDDDate(Date date) 和getYYYYMMDDHHMMSSDate(Date date)

完全可以用一个函数实现
另外这两个函数体里的实现,似乎啰嗦了些,直接用类似:
 String pattern = "yyyyMMddHHmmss";
		SimpleDateFormat sdf= new SimpleDateFormat(pattern);
		
		String sDateStr = sdf.format(date);
		return sDateStr;


即可。


pattern 可以改成静态常量,作为参数传入。
2 楼 menzi_love 2009-05-14  
谢谢楼主,这样类太好了,很实用
1 楼 yanshuihualiveses 2009-04-27  
顶! 先收藏了!谢谢!

相关推荐

    java的Date工具类

    这是本人自己整理的java中的Date工具类,包含了常用的时间格式化方法和转换方法;在工作中使用起来还是蛮方便的;希望对大家有帮助!

    javadate工具类

    date工具类

    String和Date工具类

    String工具类:校验是否包含表情、字符串切割、过滤空白字符、过滤特殊字符(换行符、回车符、制表符) Date工具类:时间格式化转化、时间获取、时间加减(年月日时分)、数字时间校验

    java Date工具类

    最近由于项目需要写了一些关于操作Date的代码,建议把经常需要的工具类保存下来,以备不时之需

    Date日期操作工具类

    Date日期处理的工具类,包括日期格式化,字符串转换成日期,对日期的【时分秒年月日】进行加/减,获取时间差,计算两个日期之间相差的天数,等各种对日期的操作

    date工具类

    很好的日期时间工具类,比较全,用语java开发中日期的处理

    google Guava集合工具类(超实用)

    Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你...

    个人总结常用经典Utils工具类

    1、Utils工具类有String工具类、XmlNode节点工具类、BeanFactory相关、Common工具类、Cookie工具类、Date工具类、Http工具类、JDBC工具类、日志Log工具类、Servlet相关等。2、工具类省了重复造轮子的工作,可以直接...

    java Date操作工具类

    java Date操作工具类,对日期的各种基本的操作

    java常用工具类

    Java工具类,总结好的,放入即可使用,包含date工具类string工具类等

    DateUtils Java时间工具类

    非常好用的Date工具类 1、计算两个日期之间相差的天数 2、判断日期是否为周六日 3、获取当前周开始日期 4、获取当前周结束日期 5、判断年份是否是闰年 6、根据年份和月份计算天数 7、判断日期为该年的第几周 等等

    java 操作的日期 date

    java 操作的日期 date 直接把包放到lib目录,然后引用就可以了

    date常用工具类,date转string,string转date,format类型string

    date常用工具类

    Date 转换工具类

    包含了常用的java时间日期的 双向转换,日期转换为相应格式的字符串,字符串转换为相应格式的日期等。

    获取Date类型数据的工具类

    可以通过此工具类获取当前date类型的时间,可以获取16位的随机数

    DateUtil.java

    date工具类

    Date时间操作工具类

    Date时间操作工具类 js: 1.一个日期时间加上分钟数,得到一个新的日期时间 2.判断当前时间是否在时间段之内 3.根据默认的格式格式化时间 4.根据指定的格式格式化时间 5.改变月份 6.改变天数 7.计算天数间隔 8.Date转...

    java常用类解析及示例及一些工具类源代码

    主要讲解了System类、Object类、Arrays类、Cloneable接口、IO系统输入输出类及装饰类、IO系统文本读写工具类、IO系统二进制读写工具类、对象序列化工具类、File类及文件搜索工具类、java异常机制及自定义异常类、...

    excel 注解方式导入导出(包含常用工具类)

    excel 注解方式导入导出(包含基础类公用方法)还包含Date工具类,String 工具类 HttpCline工具类

Global site tag (gtag.js) - Google Analytics