`

一个不错的时间处理类

阅读更多
package org.uintec.util;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 日期处理工具。
 * <p>
 * 相关的日期处理工具类为org.apache.commons.lang.time.DateFormatUtils
 * 
 * @since 1.0.0
 */

public class DateUtil {

	/** YYY格式 */
	public static final String FORMAT_DATE_YEAR = "yyyy";

	/** YYYY-MM 格式 */
	public static final String FORMAT_DATE_YEAR_MONTH = "yyyy-MM";

	/** YYYY-MM-dd 格式 */
	public static final String FORMAT_DATE = "yyyy-MM-dd";

	/** 默认格式 */
	public static final String FORMAT_TIME = "HH:mm:ss";

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

	/** 日志 */
	private static Logger logger = LoggerFactory.getLogger(DateUtil.class);

	/**
	 * 将日期转换成字符格式
	 * 
	 * @param date
	 *            java.util.Date类型
	 * @param format
	 *            如果为null或"",默认为DATE格式
	 * @return 无法成功转换则返回null
	 */
	public static String date2String(java.util.Date date, String format) {
		String result = null;
		if (date == null) {
			return result;
		}
		if (StringUtils.isEmpty(format)) {
			format = FORMAT_DATE;
		}
		try {
			result = DateFormatUtils.format(date, format);
		} catch (Exception ex) {
			logger.warn("日期转换为字符串错误,日期:" + date.toString() + ", 格式:" + format);
		}

		return result;
	}

	/**
	 * 将字符串转换成日期格式
	 * 
	 * @param str
	 *            需要转换的字符串
	 * @param format
	 *            相应的转换格式,如果参数为Blank则表示按常规的三种格式转换
	 * @return 如果不能正常转换则返回null
	 */
	public static java.util.Date string2Date(String str, String format) {
		if (StringUtils.isEmpty(str)) {
			return null;
		}
		Date result = null;
		String[] formats = null;
		if (StringUtils.isEmpty(format)) {
			formats = new String[3];
			formats[0] = FORMAT_DATETIME;
			formats[1] = FORMAT_DATE;
			formats[2] = FORMAT_TIME;
		} else {
			formats = new String[4];
			formats[0] = format;
			formats[1] = FORMAT_DATETIME;
			formats[2] = FORMAT_DATE;
			formats[3] = FORMAT_TIME;
		}
		try {
			result = DateUtils.parseDate(str, formats);
		} catch (Exception ex) {
			logger.warn("日期或时间格式不正确,日期时间字符串:" + str + ", 格式:" + format);

		}

		return result;
	}

	/**
	 * 将字符串转换成sql日期格式
	 * 
	 * @param str
	 *            需要转换的字符串
	 * @param format
	 *            相应的转换格式,如果参数为Blank则表示按常规的三种格式转换
	 * @return 如果不能正常转换则返回null
	 */
	public static java.sql.Date string2SqlDate(String str, String format) {
		return new java.sql.Date(string2Date(str, format).getTime());
	}

	/**
	 * 将时间戳转换成字符串格式
	 * 
	 * @param ts
	 *            时间戳
	 * @param format
	 *            日期时间格式
	 * @return 转换后的字符串
	 */
	public static String timestamp2String(Timestamp ts, String format) {
		return ts == null ? null : date2String(
				new java.util.Date(ts.getTime()), format);
	}

	/**
	 * 将字符串转换成时间戳格式
	 * 
	 * @param str
	 *            需要转换的字符串
	 * @param format
	 *            相应的转换格式,如果参数为Blank则表示按常规的三种格式转换
	 * @return 如果不能正常转换则返回null
	 * @throws Exception
	 */
	public static Timestamp string2Timestamp(String str, String format) {
		return string2Date(str, format) == null ? null : new Timestamp(
				string2Date(str, format).getTime());
	}

	/**
	 * 添加年。
	 * 
	 * @param date
	 *            日期
	 * @param num
	 *            添加的年数
	 * @return 添加后的日期
	 */
	public static java.util.Date addYears(java.util.Date date, int num) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.YEAR, num);
		return cal.getTime();
	}

	/**
	 * 添加月份。
	 * 
	 * @param date
	 *            日期
	 * @param num
	 *            添加对月数
	 * @return 添加后的日期
	 */
	public static java.util.Date addMonths(java.util.Date date, int num) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.MONTH, num);
		return cal.getTime();
	}

	/**
	 * 添加天数。
	 * 
	 * @param date
	 *            日期
	 * @param num
	 *            添加的天数
	 * @return 添加后的日期
	 */
	public static java.util.Date addDays(java.util.Date date, int num) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.DAY_OF_YEAR, num);
		return cal.getTime();
	}
	
	/**
	 * 添加小时。
	 * @param date 日期
	 * @param num 添加的小时数
	 * @return 添加后的日期
	 */
	public static java.util.Date addHours(java.util.Date date, int num) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.HOUR_OF_DAY, num);
		return cal.getTime();
	}
	
	/**
	 * 添加分钟
	 * @param date 日期
	 * @param num 添加的分钟数
	 * @return 添加后的日期
	 */
	public static java.util.Date addMinutes(java.util.Date date, int num) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.MINUTE, num);
		return cal.getTime();
	}

	/**
	 * 得到当年第一天的开始时间。
	 * 
	 * @param date
	 *            日期
	 * @return 当年第一天的开始时间
	 */
	public static java.util.Date getFirstDateOfYear(java.util.Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.DAY_OF_YEAR, cal
				.getActualMinimum(Calendar.DAY_OF_YEAR));
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		return cal.getTime();
	}

	/**
	 * 得到当月第一天的开始时间。
	 * 
	 * @param date
	 *            日期
	 * @return 当月第一天的开始时间
	 */
	public static java.util.Date getFirstDateOfMonth(java.util.Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.DAY_OF_MONTH, cal
				.getActualMinimum(Calendar.DAY_OF_MONTH));
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		return cal.getTime();
	}

	/**
	 * 得到当年的最后一天最后一秒。
	 * 
	 * @param date
	 *            日期
	 * @return 当年最后一天最后一秒
	 */
	public static java.util.Date getLastDateOfYear(java.util.Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.DAY_OF_YEAR, cal
				.getActualMaximum(Calendar.DAY_OF_YEAR));
		cal.set(Calendar.HOUR_OF_DAY, 23);
		cal.set(Calendar.MINUTE, 59);
		cal.set(Calendar.SECOND, 59);
		return cal.getTime();
	}

	/**
	 * 得到当月的最后一天最后一秒。
	 * 
	 * @param date
	 *            日期
	 * @return 当月最后一天最后一秒
	 */
	public static java.util.Date getLastDateOfMonth(java.util.Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.DAY_OF_MONTH, cal
				.getActualMaximum(Calendar.DAY_OF_MONTH));
		cal.set(Calendar.HOUR_OF_DAY, 23);
		cal.set(Calendar.MINUTE, 59);
		cal.set(Calendar.SECOND, 59);
		return cal.getTime();
	}

	/**
	 * 获得当前的星期的字符串形式,如:星期日,星期一……
	 * 
	 * @param date
	 *            日期
	 * @return 星期*
	 */
	public static String getStringDayOfWeek(Date date) {
		String result = "";
		if (null != date) {
			SimpleDateFormat formatter4 = new SimpleDateFormat("E");
			result = formatter4.format(date);
		}
		return result;
	}

	/**
	 * 获得两个日期的大小
	 * 
	 * @param date
	 *            日期
	 * @return 1 d1大于d2 0 d1等于d2 -1 d1小于d2
	 */
	public static int compareDate(Date d1, Date d2) {
		return d1.getTime() > d2.getTime() ? 1
				: (d1.getTime() < d2.getTime() ? -1 : 0);
	}

	/**
	 * 比较两个日,此方法用在天气解析日期用
	 * 
	 * @param day1
	 * @param day2
	 * @return -1 day1为day2之前 0 day1,day2是同一天 1 day1为day2之后
	 */
	public static int compareDay(int day1, int day2) {
		if (day1 == day2) {
			return 0;
		}
		if (Math.abs(day1 - day2) > 15) {
			if (day1 > day2) {
				return -1;
			} else {
				return 1;
			}
		} else if (day1 < day2) {
			return -1;
		} else {
			return 1;
		}
	}

	/**
	 * 比较两个日,此方法用在天气解析日期用
	 * 
	 * @param day1
	 * 
	 * @param day2
	 * 
	 * @return -2 day1day2 -1 day1day2 0 day1,day2 1 day1day2
	 */
	public static int compareDay2(int day1, int day2) {
		if (day1 == day2) {
			return 0;
		}
		int yesday = Integer.parseInt(DateUtil.date2String(DateUtil.addDays(
				new Date(), -1), "dd"));
		if (Math.abs(day1 - day2) > 15) {
			if (day1 > day2) {
				if (day1 == yesday) {
					return -1;
				} else {
					return -2;
				}
			} else {
				return 1;
			}
		} else if (day1 < day2) {
			if (day1 == yesday) {
				return -1;
			} else {
				return -2;
			}
		} else {
			return 1;
		}
	}

	public static void main(String[] args) {
		Date date = new Date();
		int result = DateUtil.compareDay(31, 1);
//		System.out.println(result);
	}
}

 

分享到:
评论

相关推荐

    论文研究-对象定位处理中分类信息融合技术研究.pdf

    在PASCAL 2006数据集上相应的实验结果表明, 前者在缩短处理时间的同时取得了不错的定位平均精度, 而后者对最优框得分的改进也在多个类别上带来了定位效果的提高。实验结果表明, 分类信息融入对象定位处理中能提升...

    DateHandler.java日期处理类Java文件下载.rar

    DateHandler.java日期处理类Java文件下载,有些功能很不错哦,比如计算是否是季度末、计算从现在开始几天后的时间、得到当前时间,用于文件名,使用yyyyMMddHHmmss格式、比较日期,与现在-N天的日期对比、比较日期,...

    Delphi的一个超级函数代码库

    公历与农历换算和时间处理的函数单元,具体看里面的说明。 Clipboards.pas 提供一个剪贴板增强类,可支持保存和载入剪贴板,支持多重剪贴板。 ComputerInfo.pas 完整的系统信息检测单元,从软件到硬件,从CPU到...

    .net辅助通用类

    里面包含各种通用类,如:图片处理类(ImageHelp.cs)、加密/解密类(Encrypt.cs)、缓存常用操作类(CacheUtil.cs)等共18个类库,用的时间久了,感觉还不错,还能不断完善,一个个类库弄回来,来源我都不记得哪里...

    一个方便的php日历类.zip

    主要介绍了一个比较不错的PHP日历类分享,本文直接给出了实现的类代码和使用方法示例,需要的朋友可以参考下,说到对时期和时间的处理,就一定要介绍一下日历程序的编写。但一提起编写日历,大多数人都会认为日历的...

    一个比较不错的PHP日历类分享

    本例涉及的日期和时间函数并不是很多,都是前面介绍的内容,主要是通过一个日历类的编写,巩固一下前面介绍过的面向对象的语法知识,以及时间函数应用,最主要的是可以提升初学者的思维逻辑和程序设计能力。将日历类...

    Super Run Time Library

     Calendar.pas 公历与农历换算和时间处理的函数单元,具体看里面的说明。  Clipboards.pas 提供一个剪贴板增强类,可支持保存和载入剪贴板,支持多重剪贴板。  ComputerInfo.pas 完整的系统信息检测单元,从...

    自然语言处理详细资料入门到进阶

    第一种,在实践中学习,找一个特定的任务,譬如文本分类、情感分析等。然后以做好任务为导向的去挖掘和这一个任务相关的知识点。 由于没有系统的学习,肯定会遇到各种各样的拦路虎问题,当遇到不懂的概念时,利用...

    C#基类库(苏飞版)

    C#Encrypt--Encrypt加密/Encrypt解密/附加有MD5加密,个人感觉很不错的一个加密类 HashEncode 哈希加密帮助类,得到随机哈希加密字符串,随机哈希数字加密等 MySecurity MySecurity--Security安全加密/Security...

    C#基础类库

    C#Encrypt--Encrypt加密/Encrypt解密/附加有MD5加密,个人感觉很不错的一个加密类 HashEncode 哈希加密帮助类,得到随机哈希加密字符串,随机哈希数字加密等 MySecurity MySecurity--Security安全加密/Security...

    逆时偏移matlab代码

    计算过程是从时间剖面的最后一个时间采样点开始,逆时外推直到时间零点,此时空间中所有振幅值组成了最终的偏移剖面。而叠前逆时偏移则是对单炮记录数据进行逆时偏移,然后将各炮的成像结果叠加,得到最终的成像剖面...

    HTML5图表框架echarts实战项目(50套源码),大数据平台展示可视化效果

    最近接了个任务需要用H5在前台两个大电视上做两页数据展示公司的产品数据,效果要高大上,还好之前接触过HTML5,所以第一时间想到就是echarts,这个框架对于数据展示尤其图表类处理的还是非常强大和炫酷的。...

    HTML5图表框架echarts实战项目(源码),大数据平台展示可视化效果

    最近接了个任务需要用H5在前台两个大电视上做两页数据展示公司的产品数据,效果要高大上,还好之前接触过HTML5,所以第一时间想到就是echarts,这个框架对于数据展示尤其图表类处理的还是非常强大和炫酷的。...

    PinPKM-V201525(官网发布的最后一个免费无使用限制版本)

    7.支持近三天、近一个月、阅读次数、日期视图、问答学习等来复习收藏的资料为自己的知识 8.支持用Word来收集网页,这是PinPKM 的独门武功 9.知识库的容量仅受硬盘大小限制,采用分散文档保存来确保文档不受损 10....

    pub类库

    从2004年,我在一个公司作服务端软件的开发,要支持linux/windows平台,主要是为了容易维护,就设计、开发了这一套比较常用的类。 2005一直在windows下作IPTV的开发,在2006年底,又回到linux下作IPV6下IPTV的...

    VC编程技巧精选,很不错

    78.用MFC写了一个控件,如何在另一个县城里发事件? 79.关于DIADOG背景图象 80.如何显示随光标移动的提示窗口 81.怎么用VC++5.0来编写图像打印程序,我的程序是基于对话框的 82.请问怎样象Winzip一样,给Win95自己的...

    C#基类库大全下载--苏飞版

    C#Encrypt--Encrypt加密/Encrypt解密/附加有MD5加密,个人感觉很不错的一个加密类 HashEncode 哈希加密帮助类,得到随机哈希加密字符串,随机哈希数字加密等 MySecurity MySecurity--Security安全加密/Security...

    Sosoo 1.0网络爬虫程序.doc

    设置处理文档的时间间隔【sleepTime】:当处理完一个url时,设置这个间隔时间处理下一个url。单位为s,默认值为60,推荐使用5s。 robby.setSleepTime(0); 设置http连接超时时间:在连接服务器时,可能由于网络...

    类hackernews源码iNews.zip

    数据库方面使用的一个paris库,它本身使用PDO来处理SQL,PDO本身会对数据进行转义处理再存入。 性能其实是个很泛的话题,iNews.io数据样本太少,还不好看出性能到底如何,就目前的平均输出时间来看只有30ms左右,...

    Python 2.5

    有经验的开发人员知道给一个新功能或程序建立一个测试套件会节约时间并减少麻烦。如果一个程序可以与输入输出文件工作,Python 可以生成输入,运行这个程序,然后检查输出并进行分析。如果问题在于数据,你可以编写...

Global site tag (gtag.js) - Google Analytics