工作中常用代码--DateUtils

工作中经常遇到处理日期的问题, 当然有一些优秀开源的库(例如 joda-time, 功能十分强大), 不过个人还是比较偏好自写一点常用的代码, 毕竟开源库中我们实际使用到的功能并不多,如果引入库,个人感觉造成一些资源浪费(纯属个人观点)。下面就是我常用一个工具类,DateUtils,  仅仅就封装了一些本人工作中常用到的方法,这儿贴出来,代码如有不当之处,麻烦指出(不胜感激):

/**
 * @author ying.dong
 * DateUtils
 */
public class DateUtils {

    private static final ThreadLocal<SimpleDateFormat> threadLocal = new ThreadLocal<SimpleDateFormat>();

    /**
     * define datePattern
     * @author ying.dong
     *
     */
    public enum DatePattern {

        DATE_TIME_PATTERN("yyyy-MM-dd HH:mm:ss"), DATE_PATTERN("yyyy-MM-dd"), DATE_NO_SYMBOL_PATTERN("yyyyMMdd");

        private String datePattern;

        private DatePattern(String pattern) {
            this.datePattern = pattern;
        }
        public String getDatePattern() {
            return this.datePattern;
        }
    }

    /**
     * define operation unit
     * @author ying.dong
     *
     */
    public enum OperationUnit {
        YEAR, MONTH, DAY, HOUR, MINUTE, SECOND;
    }

    /**
     * get SimpleDateFormat instance by ThreadLocal
     * @return
     */
    private static SimpleDateFormat getSimpleDateFormat() {
        SimpleDateFormat formatter = threadLocal.get();
        if (formatter == null) {
            formatter = new SimpleDateFormat();
            threadLocal.set(formatter);
        }
        return formatter;
    }

    /**
     * config DateFomatter
     * @param datePattern
     */
    private static SimpleDateFormat configFormatterPattern(DatePattern datePattern) {
        SimpleDateFormat formatter = getSimpleDateFormat();
        formatter.applyPattern(datePattern.getDatePattern());
        return formatter;
    }

    /**
     * parse calendar to String
     * @param calendar
     * @return
     */
    public static String parseDate2Str(Calendar calendar) {
        return parseDate2Str(DatePattern.DATE_TIME_PATTERN, calendar.getTime());
    }

    /**
     * parse date to String
     * @param date
     * @return
     */
    public static String parseDate2Str(Date date) {
        return parseDate2Str(DatePattern.DATE_TIME_PATTERN, date);
    }

    /**
     * parse calendar to String
     * @param datePattern
     * @param calendar
     * @return String
     */
    public static String parseDate2Str(DatePattern datePattern, Calendar calendar) {
        return parseDate2Str(datePattern, calendar.getTime());
    }

    /**
     * parse Date to String
     * @param datePattern
     * @param date
     * @return String
     */
    public static String parseDate2Str(DatePattern datePattern, Date date) {
        SimpleDateFormat formatter = configFormatterPattern(datePattern);
        return formatter.format(date);
    }

    /**
     * parse String to Date
     * @param datePattern
     * @param dateStr
     * @return Date
     * @throws ParseException
     */
    public static Date parseStr2Date(DatePattern datePattern, String dateStr) throws ParseException {
        SimpleDateFormat formatter = configFormatterPattern(datePattern);
        return formatter.parse(dateStr);
    }

    /**
     * parse timestamp String to date
     * @param timestampStr
     * @return
     */
    public static Date parseTimestampStr2Date(String timestampStr) {
        long timestamp = Long.parseLong(timestampStr) * 1000;
        return parseTimestampStr2Date(timestamp);
    }

    /**
     * parse timestamp to date
     * @param timestamp
     * @return
     */
    public static Date parseTimestampStr2Date(long timestamp) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(timestamp * 1000);
        return calendar.getTime();
    }

    /**
     * calendar plus operation
     * @param unit
     * @param amount
     * @param calendar
     * @return
     */
    public static Calendar plus(OperationUnit unit, int amount, Calendar calendar) {
        switch (unit) {
        case YEAR:
            calendar.add(Calendar.YEAR, amount);
            break;

        case MONTH:
                calendar.add(Calendar.MONTH, amount);
                break;

        case DAY:
            calendar.add(Calendar.DAY_OF_YEAR, amount);
            break;

        case HOUR:
            calendar.add(Calendar.HOUR_OF_DAY, amount);
            break;

        case MINUTE:
            calendar.add(Calendar.MINUTE, amount);
            break;

        case SECOND:
            calendar.add(Calendar.SECOND, amount);
            break;

        default:
            break;
        }
        return calendar;
    }

    /**
     * date plus operation
     * @param unit
     * @param amount
     * @param date
     * @return
     */
    public static Date plus(OperationUnit unit, int amount, Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar = plus(unit, amount, calendar);
        return calendar.getTime();
    }

    /**
     * date plus operation with timestamp
     * @param date
     * @param timestamp
     * @return
     */
    public static Date plus(Date date, long timestamp) {
        timestamp = date.getTime() + timestamp * 1000;
        date.setTime(timestamp);
        return date;
    }

    /**
     * calendar minus operation
     * @param unit
     * @param amount
     * @param calendar
     * @return
     */
    public static Calendar minus(OperationUnit unit, int amount, Calendar calendar) {
        return plus(unit, -amount, calendar);
    }

    /**
     * date minus operation
     * @param unit
     * @param amount
     * @param date
     * @return
     */
    public static Date minus(OperationUnit unit, int amount, Date date) {
        return plus(unit, -amount, date);
    }

    /**
     * date minus operation with timestamp
     * @param date
     * @param timestamp
     * @return
     */
    public static Date minus(Date date, long timestamp) {
        return plus(date, -timestamp);
    }

    /**
     * whether the date is before when
     * @param date
     * @param when
     * @return
     * @throws ParseException
     */
    public static boolean isBefore(Date date, String when) throws ParseException {
        Date whenDate = parseStr2Date(DatePattern.DATE_TIME_PATTERN, when);
        return isBefore(date, whenDate);
    }

    /**
     * whether the date is before when
     * @param date
     * @param when
     * @param datePattern
     * @return
     * @throws ParseException
     */
    public static boolean isBefore(Date date, String when, DatePattern datePattern) throws ParseException {
        Date whenDate = parseStr2Date(datePattern, when);
        return isBefore(date, whenDate);
    }

    /**
     * whether the date is before when
     * @param date
     * @param when
     * @return
     */
    public static boolean isBefore(Date date, Date when) {
        return date.before(when);
    }

    /**
     * whether the date is after when
     * @param date
     * @param when
     * @return
     * @throws ParseException
     */
    public static boolean isAfter(Date date, String when) throws ParseException {
        Date whenDate = parseStr2Date(DatePattern.DATE_TIME_PATTERN, when);
        return isAfter(date, whenDate);
    }

    /**
     * whether the date is after when
     * @param date
     * @param when
     * @param datePattern
     * @return
     * @throws ParseException
     */
    public static boolean isAfter(Date date, String when, DatePattern datePattern) throws ParseException {
        Date whenDate = parseStr2Date(datePattern, when);
        return isAfter(date, whenDate);
    }

    /**
     * whether the date is after when
     * @param date
     * @param when
     * @return
     */
    public static boolean isAfter(Date date, Date when) {
        return date.after(when);
    }

}

目前,自知bug一处: parseStr2Date 方法没去校验传入的dataPattern的格式(此处需用正则,人比较懒,没写)。

时间: 2024-10-14 10:48:01

工作中常用代码--DateUtils的相关文章

软件测试工程师工作中常用的Linux命令

Linux系统有着众多的优点,比方开源.非商业版本免费.多任务多用户操作,因而Linux系统在非桌面范畴占有压倒性的市场份额.关于互联网技术工作者来说,控制常用的Linux命令也是一门必修课.下面罗列一些笔者在工作中常用的Linux命令. cd 切换目录 cd .. 返回上一层目录 cd . 进入当前目录 cd - 返回前一次的目录,即上一次的目录不是上一层目录 ls 查看文件与目录 用法: ls [参数][文件] 参数: ls –l 显示文件的权限和属性 ls –a 列出所有的文件,包含隐藏文

我工作中常用的Git命令

本篇文章记录的是博主在现实工作中常用的Git命令....... 注:如果想了解更全面的Git命令请咨询度娘或者官方文档 克隆项目 git clone -b  要更新的分支名称(如:master)  http://用户名:密码@ 192.168.66.66/root/xxx.git 说明:    1.克隆前先创建好要存放项目的目录,路径尽量不要有中文 2.这里使用的是http协议的+指定分支名称+指定用户名和密码 2.更新项目   +   提交项目 博主强烈建议使用SourceTree等工具进行更

工作中常用,实用工具推荐!

原文:工作中常用,实用工具推荐! Red Gate 家族 大名鼎鼎的RedGate,相信大家都不会陌生,Reflector就是它家做的.这里就不介绍了.我本地安装的是09年下的一个套装,我介绍下常用的工具: SQL DOC: 如图:图1是编辑表名,编辑好之后图2能选择多种生成类型,图3和4是生成的chm的效果,挺不错的吧,索引,sql脚本,都生成好了,看起来 很不错啊! SQL DataGenerator 为我们新项目生成测试数据,你也可以自定义数据比如说长度啊,最小最大值,递增还是随机等等,如

收集一些工作中常用的经典SQL语句

作为一枚程序员来说和数据库打交道是不可避免的,现收集一下工作中常用的SQL语句,希望能给大家带来一些帮助,当然不全面,欢迎补充! 1.执行插入语句,获取自动生成的递增的ID值 INSERT INTO SysRole (RoleName,RoleDesc) VALUES('超级管理员','描述') SELECT @@identity as 'id' 2.在同一数据表找到相同属性的记录 SELECT RoleName FROM SysRole GROUP BY RoleName HAVING COU

日常工作中常用的Linux命令

以下Linux命令是我日常工作中常用到的: sudo su - :切换为临时的root权限; chmod +x * :用于改变linux系统文件或目录的访问权限; ps -ef |grep dubbo-account :查看进程; ./ shutdown.sh : 关闭某个服务; tar -zxf nginx-1.6.tar.gz: 解压; less all.log : 查看当天的日志; tail -f all.log: 监控日志; ls -lh: 查看各个文件的大小; sz all.log:

工作中常用Linux命令:mkdir命令

本文链接:http://www.cnblogs.com/MartinChentf/p/6076075.html (转载请注明出处) 在Linux系统中,mkdir命令用来创建一个目录或一个级联目录. 1. 命令格式 mkdir [选项] 目录名 2. 命令选项 -m=mode 为目录指定访问权限,与chmod类似. -p 如果目录已经存在,则不会有错误提示.若父目录不存在,将会创建父目录.该选项常用于创建级联目录. -v 为每个目录显示提示信息. 3. 实例 实例1:在当前目录创建baklog目

工作中常用的Linux命令(2):ipcs/ipcrm命令

ipcs 1. 命令格式 ipcs [resource-option] [output-format] ipcs [resource-option] -i id 2. 命令功能 提供IPC设备的信息 3. 使用方法 resource选项: ipcs -m 查看系统共享内存信息 ipcs -q 查看系统消息队列信息 ipcs -s 查看系统信号量信息 ipcs [-a] 系统默认输出信息,显示系统内所有的IPC信息 [[email protected] data]$ ipcs -a ------

工作中常用的Linux命令:目录

工作两三年,每天都和Linux打交道,但每每使用Linux命令的时候却会像提笔忘字般不知如何使用,常常查手册或到网上找资料.此系列文章主要是为了方便自己在使用命令时随时可查阅.鄙人才疏学浅,文中若有任何错误可在留言中指正,以供大家共同进步.学习的主要参考资料: 1. <Unix环境高级编程>.<shell脚本学习指南>... 2. 我使用过的Linux命令系列 3. 每天一个Linux命令 4. 网上的其他资料 1. 工作中常用的Linux命令(1):find命令 2. 工作中常用

工作中常用SQL 查询语句备忘

--当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列.select (case when a>b then a else b end ), (case when b>c then b esle c end) from table_name --求和查询 create table #tmp(rq varchar(10), shengfu nchar(1)) insert into #tmp values('2005-05-09','胜') insert into #tm