`

分享一个关于日期常用操作工具类

    博客分类:
  • java
阅读更多

   在项目开发中,经常会涉及到对日期、时间的各种操作,若是直接使用JDK相关类个人感觉还是十分不便的;所以自己针对在项目中经常使用到的一些操作写了个工具类。

public class DateUtils {

	/**
	 * 获取当前时间日期的字符串 
	 */
	public static String getCurrentDateStr(DateFormatType dateFormatType) {
		Date date = getCurrentDate();
		return (String) OpearationDate(date, dateFormatType.getValue());
	}

	/**
	 * 时间、日期格式化成字符串
	 */
	public static String formatDate(Date date, DateFormatType dateFormatType) {
		return (String) OpearationDate(date, dateFormatType.getValue());
	}

	/**
	 * 从字符串解析成时间、日期
	 */
	public static Date parseDate(String dateStr, DateFormatType dateFormatType) {
		return (Date) OpearationDate(dateStr, dateFormatType.getValue());
	}

	/**
	 * 获取当前系统时间(原始格式)
	 */
	public static Date getCurrentDate() {
		Date date = new Date(System.currentTimeMillis());
		return date;
	}

	/**
	 * 获取当前日期的年、月、日、时、分、秒
	 */
	public static int getCurrentTime(TimeFormatType timeFormatType) {
		return getTime(getCurrentDate(), timeFormatType);
	}

	/**
	 * 获取指定日期的年、月、日、时、分、秒
	 */
	public static int getTime(Date date, TimeFormatType timeFormatType) {
		try {
			Calendar c = Calendar.getInstance();
			c.setTime(date);
			int type = timeFormatType.getValue();
			int i = c.get(type);
			return type == 2 ? i + 1 : i;
		} catch (Exception e) {
			throw new RuntimeException("获取失败", e);
		}
	}

	/**
	 * 获取指定日期的毫秒数
	 */
	public static long getMillis(Date date) {
		java.util.Calendar c = java.util.Calendar.getInstance();
		c.setTime(date);
		return c.getTimeInMillis();
	}

	/**
	 * 日期相加、减操作
	 * 
	 * 所返回结果单位为:天数
	 */
	public static int operationDate(Date date, Date diffDate, DateOperationType dateOperationType) {
		long add = getMillis(date) + getMillis(diffDate);
		long diff = getMillis(date) - getMillis(diffDate);
		return (int) ((dateOperationType.getValue() ? add : diff) / (24 * 3600 * 1000));
	}

	/**
	 * 日期月份相加、减操作
	 */
	public static Date operationDateOfMonth(Date date, int month, DateOperationType dateOperationType) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.add(Calendar.MONTH, dateOperationType.getValue() ? month : month - (month * 2));
		return c.getTime();
	}

	/**
	 * 日期天数相加、减操作
	 */
	public static Date operationDateOfDay(Date date, int day, DateOperationType dateOperationType) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		long millis = c.getTimeInMillis();
		long millisOfday = day * 24 * 3600 * 1000;
		long sumMillis = dateOperationType.getValue() ? (millis + millisOfday) : (millis - millisOfday);
		c.setTimeInMillis(sumMillis);
		return c.getTime();
	}

	private static Object OpearationDate(Object object, String formatStr) {
		if (object == null || null == formatStr || "".equals(formatStr)) {
			throw new RuntimeException("参数不能为空");
		}
		SimpleDateFormat format = new SimpleDateFormat(formatStr);
		try {
			if (object instanceof Date)
				return format.format(object);
			else
				return format.parse(object.toString());
		} catch (Exception e) {
			throw new RuntimeException("操作失败", e);
		}

	}

	public enum DateOperationType {

		/**
		 * 加操作
		 */
		ADD(true),

		/**
		 * 减操作
		 */
		DIFF(false);

		private final boolean value;

		DateOperationType(boolean operation) {
			this.value = operation;
		}

		public boolean getValue() {
			return value;
		}
	}

	public enum TimeFormatType {

		YEAR(1), MONTH(2), DAY(5), HOUR(11), MINUTE(12), SECOND(13);
		private final int value;

		TimeFormatType(int formatStr) {
			this.value = formatStr;
		}

		public int getValue() {
			return value;
		}
	}

	public enum DateFormatType {
		/**
		 * 格式为:yyyy-MM-dd HH:mm:ss
		 */
		DATE_FORMAT_STR("yyyy-MM-dd HH:mm:ss"),
		/**
		 * 格式为:yyyyMMddHHmmss
		 */
		SIMPLE_DATE_TIME_FORMAT_STR("yyyyMMddHHmmss"),

		/**
		 * 格式为:yyyy-MM-dd
		 */
		SIMPLE_DATE_FORMAT_STR("yyyy-MM-dd"),

		/**
		 * 格式为:yyyy/MM/dd
		 */
		SIMPLE_DATE_FORMAT_VIRGULE_STR("yyyy/MM/dd"),

		/**
		 * 格式为:HH:mm:ss
		 */
		HOUR_MINUTE_SECOND("HH:mm:ss"),

		/**
		 * 格式为:HH:mm
		 */
		HOUR_MINUTE("HH:mm");

		private final String value;

		DateFormatType(String formatStr) {
			this.value = formatStr;
		}

		public String getValue() {
			return value;
		}
	}
}
 

                                                                                  我还是个菜鸟,写的不好之处还请各位多多指正......

 

分享到:
评论
15 楼 icanfly 2010-06-10  
public static Date getCurrentDate() {  
        Date date = new Date(System.currentTimeMillis());  
        return date;  
    }  

这个和new Date()有什么区别。脱了裤子放屁?
14 楼 hillshills 2010-06-10  
apache commons 包!
13 楼 85977328 2010-06-10  
不错,支持楼主,工作中经常要沉淀代码~,~
12 楼 only_xxp 2010-06-10  
huangyuanmu 写道
呵呵,支持下楼主,因为我也曾经干过这样的事情。

不过还是推荐下apache commons里的项目,这些项目涵盖了大多数日常编程过程中所需要的增强工具类。

同意
11 楼 imshare 2010-06-10  
据说date4j也是操作日期的..
10 楼 YiSingQ 2010-06-10  
apache的commons以及joda time都已经是很不错的了。
9 楼 fengfeng925 2010-06-09  
h521999 写道
fengfeng925 写道
楼主代码,如果返回当前系统时间的30天前会出现错误。


请问什么意思,不是很明白?请教!

比如今天是2010-06-09,我要返回30天之前的时间,应该是2010-05-11,你计算出来的时间不正确。
8 楼 h521999 2010-06-09  
fengfeng925 写道
楼主代码,如果返回当前系统时间的30天前会出现错误。


请问什么意思,不是很明白?请教!
7 楼 x1387420 2010-06-09  
枚举类 很少用 都有点忘记了。。。
6 楼 huangyuanmu 2010-06-09  
呵呵,支持下楼主,因为我也曾经干过这样的事情。

不过还是推荐下apache commons里的项目,这些项目涵盖了大多数日常编程过程中所需要的增强工具类。
5 楼 myumen 2010-06-09  
日期计算参考Joda Time开源包
4 楼 fengfeng925 2010-06-09  
楼主代码,如果返回当前系统时间的30天前会出现错误。
3 楼 周禄康 2010-06-09  
不错,支持一下
2 楼 gaoshaoye 2010-06-09  
就这些,可以直接使用 apache 下面的 commons-lang.jar 这个包。
这里面有很多常用的操作,比较方便,也节省了很多时间 。
如果你有时间去写这个,还不如用这个包,里面有很多常用的操作,都是对 jdk lang 包下面的一些常用操作的封装。
1 楼 janrn 2010-06-09  
支持一下先。

相关推荐

    java常用工具类集合(也有转自他人的)

    总结来说,"java常用工具类集合"是一个涵盖了多种实用工具类的资源,包括但不限于字符串处理、集合操作、日期时间、IO操作等多个方面。通过学习和应用这些工具类,开发者能够更高效地编写代码,同时也能从开源社区中...

    分享28个java常用的工具类源码打包下载

    本资源分享了28个Java常用的工具类源码,涵盖了多种实用功能,包括添加水印、文件上传、生成略缩图、文件操作、MD5加密、时间日期处理、字符串操作以及过滤器和数据导出到Excel。 1. **添加水印**:在图像处理中,...

    C#常用工具类代码集合Util(自己工作总结)

    在C#编程中,工具类(Utility Class)是一种常见的设计模式,它封装了一些常用的功能,以便在项目中方便地重复使用。"MJ.Util"、"MJ.Util.Extension"和"MJ.Util.Model"这三个文件名暗示了这个压缩包可能包含了C#中的...

    JAVA常用工具类,一个五年开发经验的工程师上传的,但是要分我拿来1分让你们下载

    这个“Java常用工具类”压缩包,作为一个经验丰富的开发者分享的资源,无疑是提高开发效率、减少重复工作的好帮手。它可以帮助开发者快速集成和复用代码,减少错误,提高代码质量。在使用这些工具类时,注意阅读文档...

    分享一些java常用的工具类(源码) 非常实用

    1、常用的日期类操作 2、excel操作 3、xml操作 4、集成科大讯飞语言合成工具类; 5、集合类操作(list,map,array) 6、FTP工具类 7、csv操作 8、file文件类操作 9、拼音工具类 10、线程池 11、Unicode编码 12、...

    IOS开发常用的工具类.zip

    Objective-C的工具类往往包括字符串处理、数组和字典操作、日期和时间处理、网络请求、JSON解析、图片处理等多个方面。 1. **字符串处理**:工具类可能包含一些对NSString的扩展,比如格式化、验证、清理空格和特殊...

    个人使用常用工具类提交|simple-demo.zip

    "个人使用常用工具类提交"这个标题可能指的是某位开发者分享了自己常用的工具类集合,供他人参考或使用。 描述中的“个人使用常用工具类提交”表明这是一个个人整理的工具类库,可能包含了开发者在项目中频繁使用的...

    5年Java开发常用工具类

    这位拥有五年经验的开发者分享的工具类集合,覆盖了数据库连接、格式转换、文件操作和邮件发送等多个关键领域。下面,我们将详细探讨这些知识点。 1. **数据库连接**: - JDBC(Java Database Connectivity)是...

    自己用的工具类,自己写的

    标题中的“自己用的工具类,自己写的”表明这是一个个人创建的、用于个人或特定项目使用的工具类集合。工具类通常包含一系列静态方法,提供通用的功能,如数据处理、日期时间操作、字符串处理等,方便在不同的代码...

    Android快速开发系列 10个常用工具类实例代码详解

    日期工具类是 Android 开发中另一个常用的工具类,用于处理日期操作。日期工具类可以帮助我们快速地处理日期。 日期工具类通常包括各种日期操作方法,例如日期格式化、日期比较、日期计算等。我们可以根据需要选择...

    Java常用工具类

    分享常用的Java工具类,包括:日期,邮件,ZIP压缩解压缩,XML,HTTP,JSON,Freemarker,文件操作,图象,数组,验证码,日期,硬件信息读取,数学计算,随机数,路径,反射,正则,运行时RUNTIME,系统,汉字转...

    android开发常用工具类集锦.zip

    1. **CheckUtils.java**:这是一个用于数据验证的工具类,它可能包含如检查空值、检查字符串的有效性、验证网络连接等方法。例如,`isNullOrEmpty()`方法用于判断字符串是否为空,`isNetworkAvailable()`方法可能...

    详细的导出pdf工具类和jar包

    在Java编程中,工具类通常是一些静态方法的集合,这些方法执行特定的功能,如日期操作、字符串处理或文件操作。在本例中,"导出PDF工具类"可能包含一系列静态方法,用于生成和导出PDF文件。这些方法可能包括创建PDF...

    Java工具类分享

    分享常用的Java工具类,包括:日期,邮件,ZIP压缩解压缩,XML,HTTP,JSON,Freemarker,文件操作,图象,数组,验证码,日期,硬件信息读取,数学计算,随机数,路径,反射,正则,运行时RUNTIME,系统,汉字转...

    java 常用工具源码

    java 常用工具源码,多年工作积累,源码分享。...工作中多年积累常用工具,log封装,日期类,多线程操作,字符串处理,邮件发送,http工具类,页面处理,汉字拼音,ftp ,md5, secret,ValidatorStringEx,Xml类。

    android utils 工具类 大集合

    通常,一个工具类库会包含各种不同分类的工具类,如字符串处理、日期时间、网络请求、图片处理、文件操作等。在“MyUtils-master”中,我们可以期待找到这些功能的实现。 1. 字符串处理:在Android开发中,字符串...

    随便收集的工具类.rar

    例如,我们可以看到压缩包内有一个名为“工具类”的文件,这可能包含了以下几种常见的工具类: 1. **日期时间工具类**:这类工具类提供对日期和时间的操作,如格式化、解析、比较等,例如Java中的`java.time`包或者...

    安卓开发框架工具类相关-Android福利资源分享220个代码实例.rar

    【标题】"安卓开发框架工具类相关-Android福利资源分享220个代码实例.rar" 涵盖了丰富的Android应用程序开发中常用框架和工具类的代码实例,旨在帮助开发者提高编程效率,理解和掌握Android开发的关键技术。...

    微信小程序开发-工具类-XCX-scaffold案例源码.zip

    在微信小程序的开发过程中,"工具类"是指一组具有特定功能的代码模块,它们可以被复用,帮助开发者简化常见的编程任务,比如数据处理、网络请求、日期时间操作等。XCX-scaffold案例源码很可能是为了解析和展示如何...

    我自己日常使用的工具类

    在描述中提到了一个博客链接(https://lspgdut.iteye.com/blog/1485925),这可能是作者分享这些工具类的详细解释和使用场景。通过这个链接,我们可以深入理解每个工具类的设计理念和具体用途,学习作者在实际开发中...

Global site tag (gtag.js) - Google Analytics