`

一个不错的时间处理类

阅读更多
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);
	}
}

 

分享到:
评论

相关推荐

    一个很不错的时间工具类,能够方便的处理各种时间有关的操作,已经封装好了

    一个很不错的时间工具类,能够方便的处理各种时间有关的操作,已经封装好了

    一个不错的php日历类

    本文将围绕“一个不错的PHP日历类”进行深入探讨,旨在帮助开发者,尤其是初学者,理解面向对象编程(OOP)概念,并掌握PHP中处理日期和时间的函数。 首先,让我们来了解PHP中的日期和时间处理。PHP提供了内置的...

    一个不错的日期时间标签

    【标题】"一个不错的日期时间标签"所涉及的知识点主要集中在日期时间的处理以及用户界面(UI)设计上,尤其在Windows环境下使用Visual C++ 6(VC6)开发时的应用。这个项目可能是一个UI控件或者类库,用于在应用程序中...

    一个非常不错的php缓存类.zip

    这个“一个非常不错的php缓存类”压缩包提供了一个现成的PHP缓存类,对于开发者来说,它可以方便地集成到项目中,而无需从零开始编写缓存管理代码。 首先,我们来看PHP缓存的基本概念。缓存通常分为内存缓存(如APC...

    一个处理视频的软件很不错的

    标题中的“一个处理视频的软件很不错的”表明我们讨论的是一款优秀的视频处理工具。这款软件具备视频分割和合并的功能,且操作简便,适合各水平的用户使用。描述进一步阐述了软件的特点,即易于上手,使得任何看到它...

    类生成器c#源码既是源码还是一个很不错的编程辅助工具节省大量时间

    为了实现一个类生成器,开发者需要具备扎实的C#编程基础,熟悉面向对象设计原则,理解模板引擎的工作机制,并具备一定的编程自动化经验。通过不断学习和实践,你可以根据自己的需求构建一个强大的类生成器,让编程变...

    一个不错的下雪效果

    "一个不错的下雪效果" 描述的是一种能够为用户带来冬季氛围的交互式特效,它能让访问者仿佛置身于飘雪的场景之中。这个插件简单易用,只需导入即可在网页上实现这种视觉效果。 首先,我们要理解下雪效果是如何实现...

    c# 时间日期控件还不错

    总结起来,C#的时间日期控件和相关的日期时间处理功能提供了强大且灵活的支持,适用于各种应用场景。无论是在用户界面的交互还是后台的数据处理,C#都提供了丰富的工具和类库来满足开发者的需求。通过熟练掌握这些...

    一个封装很不错的PHP文件上传类

    rn FALSE;...综上所述,`uploadFile` 类提供了一个完整的文件上传解决方案,包括错误检查、类型验证、大小限制、文件重命名和移动。通过这个类,开发者可以方便地集成文件上传功能到他们的PHP应用中。

    C#编的一个不错的时钟!绝不后悔!

    4. 时间处理:了解DateTime类,如何获取和更新当前时间,以及如何处理时间间隔。 5. 事件处理:如点击事件、定时器事件等,用于实现时钟的实时更新或闹钟功能。 6. 软件工程实践:良好的代码组织结构、注释、版本...

    JS常用时间控件 很不错

    "JS常用时间控件 很不错"这个标题表明我们将探讨一个在JavaScript中实现的高效且用户体验良好的时间选择工具。 描述中的"做网页的时间控件,用用不错的,效果也不错"进一步强调了这个时间控件在实际应用中的表现和...

    一个不错的日历

    【标题】:“一个不错的日历” 【描述】:尽管描述中并未提供具体信息,但从“一个不错的日历”这个标题来看,我们可以推测这可能是指一个功能完善的日历应用或者库,可能具有良好的用户界面,易用性,以及可能包含...

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

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

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

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

    一个非常不错钟表小程序

    标题中的“一个非常不错钟表小程序”指的是一个小型的应用程序,设计用于显示时间和可能具有其他与时间相关的功能。这个小程序的特色在于它在运行时占用的系统资源非常少,这通常意味着它对计算机性能的影响微乎其微...

    是一个C++的图书系统,还不错,不是我写的

    这一模块可以通过创建一个图书类(Book Class)来实现,每个实例代表一本具体的图书。 2. **读者模块**:包含读者的个人信息,如姓名、身份证号、借阅历史等。同样,可以创建读者类(Reader Class),以管理所有...

    蛮不错的一个用于开发日程安排的一个日历控件!

    它的出现无疑为日程管理类应用的开发提供了一个便捷高效的途径,让开发者能够更加轻松地构建出功能丰富且用户友好的时间管理应用。随着企业对生产力工具需求的不断提升,这个日历控件也将会在软件开发市场中占据...

    很不错的数字信号处理课件

    丁玉美教授编写的《数字信号处理(第二版)》是一本深入浅出的教材,适合初学者和有一定基础的学习者。以下是对这门课程及相关知识点的详细解释: 1. **数字信号与模拟信号**:数字信号处理首先涉及的是信号的基本...

    注册表一个不错的例子

    在这个“注册表一个不错的例子”中,我们可以看到一个利用VC++6.0编译环境开发的示例程序,这为我们提供了深入理解注册表操作的实践机会。 VC++6.0是Microsoft Visual C++的一个经典版本,它提供了一个集成的开发...

    一个不错的计时工具,秒表

    标题中的“一个不错的计时工具,秒表”指的是一个能够帮助用户精确测量时间间隔的软件应用,通常用于计时、定时或追踪特定活动的持续时间。这类工具在日常生活中非常实用,比如体育训练、烹饪、学习和工作项目管理等...

Global site tag (gtag.js) - Google Analytics