设为首页 加入收藏

TOP

使用apache.lang包安全简洁地操作Java时间
2016-12-12 08:15:21 】 浏览:2215
Tags:使用 apache.lang 安全 简洁 操作 Java时间

引言


最近偶遇apache开发的工作java工具包,一使用,就发现自己爱上它了。不多说了,下面介绍org.apache.commons.lang3.time包中处理java程序员为之头疼的时间的类。


附上官网jar包下载地址:http://commons.apache.org/proper/commons-lang/download_lang.cgi


在这之前还是先简单说一下java本身的时间处理类。


Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

该类还为实现包范围外的具体日历系统提供了其他字段和方法。这些字段和方法被定义为 protected。


具体可见API手册。


SimpleDateFromat不是线程安全的,这是因为它继承了DateFormat中的一个Calendar成员,每次在执行format操作时,都会改成成员calendar的状态。这就是不安全的根源。


多线程下,很可能对Calendar的写 和 读 操作不同步(不是被同一个线程执行的),就会发生意外。


下面开始介绍文章的主角类。


提供了对时间对象的运算操作,就像和操作 int 一样。


工具类,不允许创建实例


将时间转化为字符串的工具类。不可实例化对象。


线程安全。


这个类中的所有重载的format 实质都是调了下面2个函数。而这2个函数中又借用了FastDateFormat的API。


FastDateFormat是apache time util 优于Java SimpleDateFormat 的核心类。它是线程安全的。


DateUtils 在parse时内部利用了java自身的SimpleDateFormat(即便如此,DateUtils的操作都是是线程安全的,因为SimpleDateFromat是作为方法的局部变量使用的),而 DateFormatUtils 利用了apache开发的线程安全的FastDateFromat。因此,DateUtils和DateFormatUtils可以满足简单的时间操作了。如果需要更多的定制化操作,就可能需要


下面介绍的FastDateFormat了。


FastDateFormat是一个快速 且 线程安全的时间操作类,它完全可以替代SimpleDateFromat。


因为是线程安全的,所以你可以把它作为一个类的静态字段使用


构造函数为protected,不允许直接构造它的对象,可以通过工厂方法获取。


FastDateFormat之所以是线程安全的,是因为这个类是无状态的:内部的成员在构造时就完成了初始化,并在对象存活期,不提供任何API供外界修改他们。


FastDateFormat内部有很重要的2个对象:


分别完成解析和format工作。他们也都是线程安全的,都修饰为final。有兴趣的可以取读源代码。


例子:


SimpleDateFormat的时间字符串表达模式定义表


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java中的interface 接口 下一篇Java 中 Comparable 接口的意义和..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目