Android關於獲取日期時間知識點整理

項目開發過程中,獲取時間日期以及一些轉換呢,老忘記來着,總得花時間去查找資料,於是乎,現在終於要來整理整理下這方面的知識點了,用於鞏固自己的記憶!

時間戳(timestamp)

指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數,以爲單位。【有時候一個項目從服務器那邊返回的時間數據就是時間戳的格式,所以先弄清時間戳的定義。】

System.currentTimeMillis()

首先是 System.currentTimeMillis(),系統方法,用於獲取當前系統時間,以毫秒爲單位,返回的是long類型數據。若要獲取當前的Unix時間戳,則需要 System.currentTimeMillis()/1000。

打印這個方法得到的數據:

Paste_Image.png

Date

類 java.util.Date 表示特定的瞬間,精確到毫秒。java.sql.Date是針對SQL語句使用的,它只包含日期而沒有時間部分。
默認構造方法代表當前系統時間,打印new Date():


Paste_Image.png

Mon代表Monday(週一),Feb代表February(二月),06代表6號,GMT+代表格林尼治標準時間。

new Date().getTime() 是得到當前時間的毫秒數等於 System.currentTimeMillis(),以毫秒爲單位。

注意Date帶參數的構造方法,可以構造指定日期的Date類對象,Date類中年份的參數應該是實際需要代表的年份減去1900,實際需要代表的月份減去1以後的值。

Date類中還提供了getDay方法,用於獲得Date對象代表的時間是星期幾,Date類規定週日是0,週一是1,週二是2,後續的依次類推。

Date中還提供了一些其他的構造方法以及其他方法,獲取時間就直接這樣子用了,由於Date類不便於實現國際化,所以從JDK1.1版本開始,推薦使用Calendar類進行時間和日期處理。

Calendar

Calendar是個抽象類,它的構造方法是protected,所以需要用getInstance()方法得到它。

Calendar c = Calendar.getInstance(); // 默認得到的是當前的日期
Log.d(TAG, c + "");

打印出:

Paste_Image.png
由此,可知道GregorianCalendar 是Calendar的一個具體實現。


getTime()方法返回的是一個Date類型,因此Calendar 與 Date 的相互轉換非常簡單:

Calendar calendar = Calendar.getInstance();  
// 從 Calendar 對象中獲取 Date 對象 
Date date = calendar.getTime();  
// 將 Date 對象設置到 Calendar 對象中
calendar.setTime(date);

getTimeInMillis()返回的是long值,得到也是當前時間的毫秒數,等於System.currentTimeMillis() 等於 new Date().getTime() 。

試驗下幾行代碼,打印出來:

Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
int week_month = c.get(Calendar.WEEK_OF_MONTH);
int week_year = c.get(Calendar.WEEK_OF_YEAR);
int week_day = c.get(Calendar.DAY_OF_WEEK);
int week_day_month = c.get(Calendar.DAY_OF_WEEK_IN_MONTH);
Log.d(TAG, "year=" + year + "\nmonth=" + month + "\nday=" + day + "\nhour=" + hour + "\nminute=" + minute + "\nsecond=" + second + "\nweek_month=" + week_month + "\nweek_year=" + week_year + "\nweek_day=" + week_day + "\nweek_day_month=" + week_day_month);
Paste_Image.png

注意此處,獲得的月份是從0開始計算的,所以真實月份需要+1即可;DAY_OF_WEEK得到的是星期幾, 1代表星期日、2代表星期1、3代表星期二,以此類推;WEEK_OF_MONTH得到的是當月日曆式的第幾周(以日曆上來看,第幾行則爲第幾周);WEEK_OF_YEAR得到的是當年的第幾周;DAY_OF_WEEK_IN_MONTH得到的是當月的第幾周(七天爲一週,如果是在當月的8號,則爲第二週);

Calendar注意事項:

  • Calendar的星期是從週日開始的,常量值爲0。
  • Calendar的月份是從一月開始的,常量值爲0。
  • Calendar的每個月的第一天值爲1。

Calendar中還有一些其他的方法,可以設置日期什麼的,看看源碼就知道怎麼使用啦。

Time

實踐下:


Paste_Image.png

Paste_Image.png

看來Time都被廢棄掉了,不推薦使用,不過還是瞭解一下它怎麼得到當前日期時間吧。

Paste_Image.png

結果:


Paste_Image.png

使用Time獲取當前時間需要setToNow()纔行;同樣的月份從0開始計算,實際月份需要+1;weekDay表示當前周的第幾天(從0開始計算,週日到週六,週日爲0);yearDay表示當前日期是當年的第幾天(從0開始計算的);monthDay表示的是當前日期在當月的第幾天。

時間格式化

最後記錄下時間格式化,使用SimpleDateFormat 將時間格式化,以符合UI設計的顯示標準。

 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 String dateString = simpleDateFormat.format(new Date());

結果:


Paste_Image.png

也可以不要年份,這個隨意啦,反正年月日時間的表達一定要這個英文就是了,大寫MM代表月份,小寫mm代表分鐘。

format方法中接收的參數是Date類型,反正瞭解了前面的基礎知識,由時間戳轉化爲Date類型也簡單,實際項目中要注意單位問題了,關鍵就是拿到的是時間的毫秒還是秒,相差1000,記得轉換。

現在年也過完了,新年的第一篇技術知識整理,要堅持下去啊,不要太相信自己的記憶力啦~新的一年,重整旗鼓,加油↖(ω)↗

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章