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 閱讀(7084) 評論(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年前的文章,今天來讀一讀

只有注冊用戶登錄后才能發表評論。


網站導航:
 
云南11选5软件