Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android時間日期類小結

Android時間日期類小結

編輯:關於Android編程

1.Calendar

Calendar類有個類方法叫做getInstance()。這個方法返回一個Calendar子類的具體實現類的實例(Calendar是一個抽象類,它的實現類是GregorianCalendar),這個實例是時區敏感的,它會隨著系統的時區變化而變化,同時,獲得的這個實例已經被初始化,可以直接使用。獲得Calendar的實例:
 Calendar rightNow = Calendar.getInstance();

Calender是一個抽象類,使用getInstance返回的是一個GregorianCalendar類的實例。
使用毫秒設置rightNow的時間:

 

setTimeInMillis(111);

 

Calendar,Date,Time類之間的轉換

Calender可以方便的和Date,Time等類做轉換,比如,下面定義的方法可以把Date轉為Calendar:

 

 

    /**
     * Sets the time of this {@code Calendar}.
     */
    public final void setTime(Date date) {
        setTimeInMillis(date.getTime());
    }

 

 


反向轉換: Date date = new Date(); date.setTime(before.getTimeInMillis());其實,這些轉換都是使用毫秒進行的,毫秒就是一個長整數了,它不涉及格式的問題,因此Time,Date,Calendar都

 

可以直接使用毫秒相互轉化,非常方便,例子如下:

Calendar->Time:

 

        Calendar calendar = Calendar.getInstance();
        Time time = new Time();
        time.set(calendar.getTimeInMillis());
Time->Calendar:

 

 

        Calendar calendar = Calendar.getInstance();
        Time time = new Time();
        calendar.setTimeInMillis(time.toMillis(true));
Time類的toMillis方法後面會有介紹。

 

 

lenient模式

Calendat類支持Lenient模式,所謂leninet模式就是容錯模式,它的意思是說,如果用戶設置的某些字段值超出了合理的范圍,比如一月32號,那麼Calender會自動把它轉為2月1號。lenient模式可以通過setLenient(true/false)來使能或者關閉。如果leninet模式被關閉,那麼當輸入一個超出正常范圍的值的時候,就會出發一個out_of_range的異常。
注意:Calender等時間類的月份都是從零開始,比我們習慣上的月份小一個月份,不知道為何要這麼設計,之前就因為這一點跳過坑。

2.Time

android.text.format.Time包中的Time類是android平台的一個時間類,但是這個類目前已經不建議使用了,取而代之的是
GregorianCalendar類。Time和Calendar功能類似,據說Time對CPU的占有率更低。
創建一個Time:
Time time = new Time();
這樣創建的Time使用默認的時區,並且會被初始化為Jan 1, 1970.
設置time為當前時間:
time.setToNow();
使用毫秒設置time的時間:
time.set(1212);
toMillis(false)與toMillis(true)的區別:
其區別在於是否支持夏令時。

 

夏令時

關於夏令時,我的理解是這樣的:為了節約能源,人為的把夏季的時間調的比實際的早,從而使人們早起的一種策略。舉個例子來說,假如冬天早晨8點天才亮,而夏季7點天就亮了,如果我還是讓大家8點起床,那豈不浪費了一個小時的陽光?所以我就把時間調早了一個小時,這樣大家還是8點起床,但是其實你已經早起了一個小時了。使用這種欺騙的方式迫使人們早睡早起,從而達到解決能源的目的。一般夏令時就是在夏季的時候把時間調早一小時。

 

獲取毫秒:
time.toMillis(false);或者time.toMillis(true);

 

3.SimpleDateFormat

SimpleDateFormat extends DateFormat

它繼承自DataFormat,除了具備DateFormat的所有功能為,它還添加了一些非常方便的功能。
在創建SimpleDateFormat的時候,我們就可以給它指定各種格式,比如:
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yy");
然後就可以得到該格式的字符串:
String aaa = dateFormat.format(new Date());
format方法需要一個Date的實例,使用Calendar的時候,它的getTime()方法可以返回一個Date實例。
SimplerDateFormat可以使用'MM','dd','yy'構造任意格式,比如:MM-dd-yy,dd-MM-yy,dd/MM/yyyy等等,因此,使用它格式化時間

日期非常方便。

以下為一些參考格式:

                 yyyy-MM-dd 1969-12-31
                 yyyy-MM-dd 1970-01-01
           yyyy-MM-dd HH:mm 1969-12-31 16:00
           yyyy-MM-dd HH:mm 1970-01-01 00:00
          yyyy-MM-dd HH:mmZ 1969-12-31 16:00-0800
          yyyy-MM-dd HH:mmZ 1970-01-01 00:00+0000
   yyyy-MM-dd HH:mm:ss.SSSZ 1969-12-31 16:00:00.000-0800
   yyyy-MM-dd HH:mm:ss.SSSZ 1970-01-01 00:00:00.000+0000
 yyyy-MM-dd'T'HH:mm:ss.SSSZ 1969-12-31T16:00:00.000-0800
 yyyy-MM-dd'T'HH:mm:ss.SSSZ 1970-01-01T00:00:00.000+0000

 

 

4.關於時區

在使用時間/日期類的時候,一定要注意時區的概念,Calendar類是一個時區敏感類,它會自動過去系統時區。但有些時候,我們可
能希望獲取GTM或者UTC時間,如果使用Calender類的話需要減去時區偏移:
before.getTimeZone().getOffset(System.currentTimeMillis());
before是一個GregorianCalendar類的實例,通過它的getTimeZone方法可以獲取一個TimeZone的實例,這個實例可以計算出時區偏移。
GTM和UTC可以認為是一個東西,他們都表示倫敦當地的時間。
Time類可以在構造的時候就指定它的時區,其構造函數定義如下:

 

 

    /**
     * Construct a Time object in the timezone named by the string
     * argument "timezone". The time is initialized to Jan 1, 1970.
     * @param timezoneId string containing the timezone to use.
     * @see TimeZone
     */
    public Time(String timezoneId) {
        if (timezoneId == null) {
            throw new NullPointerException("timezoneId is null!");
        }
        initialize(timezoneId);
    }

 

比如,創建一個時區為0的Time實例:
Time curTime = new Time("GTM+0");

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved