`

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

    博客分类:
  • 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常用的工具类(源码) 非常实用

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

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

    28个java常用的工具类源码打包下载包括了(Java实现添加水印,文件上传,生成略缩图,文件操作,Md5加密码,时间日期操作、字符串操作,过滤器,数据导出Excel等实用功能)

    Java常用工具类

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

    Java工具类分享

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

    java 常用工具源码

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

    Android集成主流优秀第三方组件框架

    这是一个集成目前Android主流优秀第三方组件、优秀好用的自定义控件、实用工具类封装、 以及一些APP共通模块(比如:版本更新、意见反馈、引导界面等等)的开发包,帮助程序员 快速开发自己的APP 已集成第三方...

    集成目前Android主流优秀第三方组件

    这是一个集成目前Android主流优秀第三方组件、优秀好用的自定义控件、实用工具类封装、以及一些APP共通模块(比如:版本更新、意见反馈、引导界面等等)的开发包,帮助程序员快速开发自己的APP 已集成第三方开源...

    Android例子源码集成安卓主流优秀第三方组件框架.zip

    这是一个集成目前Android主流优秀第三方组件、优秀好用的自定义控件、实用工具类封装、以及一些APP共通模块(比如:版本更新、意见反馈、引导界面等等)的开发包,帮助程序员快速开发自己的APP 已集成第三方开源...

    集成安卓主流优秀第三方组件框架.zip

    这是一个集成目前Android主流优秀第三方组件、优秀好用的自定义控件、实用工具类封装、以及一些APP共通模块(比如:版本更新、意见反馈、引导界面等等)的开发包,帮助程序员快速开发自己的APP   已集成第三方...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    以前写了一个java的正规表达式的java工具类,分享一下,有用到的欢迎下载使用。 如果你有常用的定义好的,且测试通过的正规表达式,欢迎跟贴,也让我享用一下 . 类中用到了 jakarta-oro-2.0.jar 包,请大家自己在 ...

    Linux操作系统基础教程

    我们并不能使同学们通过这次系列讲座成为一个 UNIX 类操作系统的高手,这次系列 讲座的目的就是在同学们中间普及 Linux 基础知识,为今后我们更加接近的了解 Linux 做一 个好的开端。 第一讲 Linux基础 在这一...

    JAVA上百实例源码以及开源项目源代码

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道VB...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--StringUtils工具类的常用方法 |--TabHost一个界面显示多Activity |--TextView单行跑马灯效果 |--TextView虚拟获得焦点 |--uploadServlet |--uri之表示资源resource |--ViewPage的使用 |--view中的tag用法之存储...

    JAVA上百实例源码以及开源项目

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道VB...

    Office办公助手 v1.1.8

    分享日期:2014-02-19 游戏题材:商业 开发商:Elinasoft Technologies 内容介绍 此软件专为办公室白领以及商务人士设计. Office办公助手提供最高效并且易用的移动办公功能。 包括许多新颖的功能设计, 例如一个...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    关于java程序员发展需要学习的路线整理集合 技术 应用技术 计算机基础知识 cpu mem disk net 线程,进程 第三方库 poi Jsoup zxing Gson 数据结构 树 栈 链表 队列 图 操作系统 linux 代码控制...

    asp.net知识库

    常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中,让你的组件也可以绑定 .NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN...

    深入理解Android:卷I--详细书签版

     对于Android应用开发工程师而言,本书中关于Binder,以及sp、wp、Handler和Looper等常用类的分析或许能帮助你迅速适应Android平台上的开发工作。  (2)Android系统开发工程师  Android系统开发工程师常常需要...

    C#微软培训资料

    第三章 编写第一个应用程序 .20 3.1 Welcome 程序 .20 3.2 代 码 分 析 .20 3.3 运 行 程 序 .23 .4 添 加 注 释 .25 3.5 小 结 .27 第二部分 C#程序设计基础.28 第四章 数 据 类 型 .28 4.1 值 类 型...

Global site tag (gtag.js) - Google Analytics