Read Sean

Read me, read Sean.
posts - 508, comments - 655, trackbacks - 9, articles - 4

[Jakarta Commons笔记] org.apache.commons.lang.time

Posted on 2005-08-01 13:19 laogao 阅读(7101) 评论(11)  编辑  收藏 所属分类: On Java

 

好了,来看我在Common Lang中最后要讲的一个包:org.apache.commons.lang.time。这个包里面包含了如下5个类:

 

DateFormatUtils – 提供格式化日期和时间的功能及相关常量;

DateUtils – CalendarDate的基础上提供更方便的访问;

DurationFormatUtils – 提供格式化时间跨度的功能及相关常量;

FastDateFormat – java.text.SimpleDateFormat提供一个的线程安全的替代类;

StopWatch – 是一个方便的计时器。

 

我们还是在一个例子中来看上述各个类的用法吧:

 

package sean.study.jakarta.commons.lang;

 

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.apache.commons.lang.time.FastDateFormat;

import org.apache.commons.lang.time.StopWatch;

 

public class DateTimeUsage {

 

    public static void main(String[] args) {

        demoDateUtils();

        demoStopWatch();

    }

   

    public static void demoDateUtils() {

        System.out.println(StringUtils.center(" demoDateUtils ", 30, "="));

        Date date = new Date();

        String isoDateTime = DateFormatUtils.ISO_DATETIME_FORMAT.format(date);

        String isoTime = DateFormatUtils.ISO_TIME_NO_T_FORMAT.format(date);

        FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM");

        String customDateTime = fdf.format(date);

        System.out.println("ISO_DATETIME_FORMAT: " + isoDateTime);

        System.out.println("ISO_TIME_NO_T_FORMAT: " + isoTime);

        System.out.println("Custom FastDateFormat: " + customDateTime);

        System.out.println("Default format: " + date);

        System.out.println("Round HOUR: " + DateUtils.round(date, Calendar.HOUR));

        System.out.println("Truncate HOUR: " + DateUtils.truncate(date, Calendar.HOUR));

        System.out.println();

    }

   

    public static void demoStopWatch() {

        System.out.println(StringUtils.center(" demoStopWatch ", 30, "="));

        StopWatch sw = new StopWatch();

        sw.start();

        operationA();

        sw.stop();

        System.out.println("operationA used " + sw.getTime() + " milliseconds.");

        System.out.println();

    }

   

    public static void operationA() {

        try {

            Thread.sleep(999);

        }

        catch (InterruptedException e) {

            // do nothing

        }

    }

 

}

 

以下是运行结果:

 

======= demoDateUtils ========

ISO_DATETIME_FORMAT: 2005-08-01T12:41:51

ISO_TIME_NO_T_FORMAT: 12:41:51

Custom FastDateFormat: 2005-08

Default format: Mon Aug 01 12:41:51 CST 2005

Round HOUR: Mon Aug 01 13:00:00 CST 2005

Truncate HOUR: Mon Aug 01 12:00:00 CST 2005

 

======= demoStopWatch ========

operationA used 1000 milliseconds.

 

具体的调用细节和完整的API请参阅Commons LangJavadoc

 

 

Feedback

# 完啦?  回复  更多评论   

2005-08-01 13:45 by emu
你手头的好东东还真多

# re: [Jakarta Commons笔记] org.apache.commons.lang.time  回复  更多评论   

2005-08-01 13:56 by 大胃
呵呵,其实是我们很多时候根本就没有留意到这些好东东的存在。

Jakarta Commons有很多子项目,Common Lang只是其中比较核心的一个。我还在考虑要不要继续写其他子项目:BeanUtils、Collections、Digester、Configuration、HttpClient、Codec、CLI、Logging...... 都是我们日常需要的,就怕写不完哦。

# re: [Jakarta Commons笔记] org.apache.commons.lang.time  回复  更多评论   

2005-08-02 17:01 by javaer
支持LZ。不知道这些Common类库跟JDK5.0重复的有多少呢?

# re: [Jakarta Commons笔记] org.apache.commons.lang.time  回复  更多评论   

2005-08-02 17:49 by 大胃
就我的感觉而言,重复的只是很少一部分。在J2SE 5.0下面,这些库依然很有用。

另一方面,现在除非是全新的完全自主开发的项目,我都不建议将代码兼容等级提高到1.5.0。

# re: [Jakarta Commons笔记] org.apache.commons.lang.time  回复  更多评论   

2006-03-09 15:22 by THEMAX
不知道有没有计算日期间隔的?比如说2个日期相差多少个月,相差多少天等.

# re: [Jakarta Commons笔记] org.apache.commons.lang.time  回复  更多评论   

2006-03-09 16:57 by 大胃
参考一下
org.apache.commons.lang.time.DurationFormatUtils

其中的formatDurationWords也许对你有用。

# re: [Jakarta Commons笔记] org.apache.commons.lang.time  回复  更多评论   

2006-03-13 14:39 by THEMAX
我想知道的是日期的间隔
例如:

d1="2006-03-01" d2="2006-05-01"
我想得出d2和d1相差几个月,

# re: [Jakarta Commons笔记] org.apache.commons.lang.time  回复  更多评论   

2006-03-13 15:25 by 大胃
我不打算去翻Javadoc抄出一个例子,(也许有,也许没有,我更倾向于相信没有)给你一个自己解决的思路吧:

两个日期间隔多少天?
每个Date都能对应出一个long数值,即毫秒数,两个Date的long相减,能够得到差值,一天有多少毫秒?很容易算出差多少天的。不过你可能还需要看看两个Date的具体时间,有可能前一个日期中的时间部分比后一个日期中的时间部分要更早或者更晚,上述方法只告诉你相差的时间折合下来有多少天,至于你需要得到的差额是将两头的日子包含在内还是除开两头的日子呢?这就需要你根据实际需要来决定了。

两个日期间隔多少月?
依次比较年、月、日,我相信不会很难吧。你说呢?

综合考虑,我猜Java自己和Jakarta Commons之所以没有给出一个很直接的方案,是有原因的。类似的算法最好还是自己实现,如果用API,我觉得不是很好定义如下问题:比如1月31号和2月1号差几个月?3月1号和4月30号差几个月?23:59到第二天的00:01相差要算成1天还是0天,再加上时区的问题,就更加复杂。一切还需要你首先明确下来需求才行。

如果你还是困惑,可以去看看java.util.Calendar、java.util.Date和org.apache.commons.lang.time.DateUtils的文档。也许你可以考虑Calendar里面的roll方法来做出一个效率不算很高的算法?

# re: [Jakarta Commons笔记] org.apache.commons.lang.time  回复  更多评论   

2006-03-13 17:24 by THEMAX
十分感谢!

# re: [Jakarta Commons笔记] org.apache.commons.lang.time  回复  更多评论   

2009-10-04 18:48 by hurry
你真厉害 !!!!
我要加油 超越你

# re: [Jakarta Commons笔记] org.apache.commons.lang.time  回复  更多评论   

2014-06-05 14:55 by 宇飞
哈哈,什么情况,10年前的文章,今天来读一读

只有注册用户登录后才能发表评论。


网站导航: