Android程式中的時間
導言
眾所周知,所有的程式中都會用到時間,而且每個系統中都會有一個處理時間的工具類DateUtils。時間在不同的地方需要格式化為不同的形式,比如存資料庫,多數會採用時間戳;在介面上展示則會格式化為一些固定格式,類似於2018-04-25 18:15:22
。
如果App支援國際化,還需要處理跨國時間,需要考慮時區和夏令時。
下面就介紹一下在程式碼中怎麼處理不同地區時間的轉換。
時區
地球劃分24個時區,分別是東十二個區,西十二個區。以倫敦格林威治天文臺為零時區,向東為東一區到東十二區,向西是西一區到西十二區,東區時間比西區早,經度每15度為一個時區,比如北京位於東120度經線,屬於東八區。
程式中也有時區概念,以Java為例,可以通過下面方式獲取時區:
/**
* 獲取美國東部時區
*/
public static TimeZone getEastUsTimeZone() {
return TimeZone.getTimeZone("America/New_York");
}
/**
* 獲取中國時區
*/
public static TimeZone getChinaTimeZone() {
return TimeZone.getTimeZone("Asia/Shanghai");
}
時間戳
時間戳(Timestamp),是指從格林威治時間1970.01.01 00:00:00(北京時間1970.01.01 08:00:00)起至現在的總秒數
,目前的時間戳是10位,如果以毫秒錶示則是13位。
時間戳在程式碼中很常用,尤其是後臺API介面,基本都需要返回時間戳,前端可以把時間戳格式化為自己想要的格式來展示。
Android中也是支援時間戳的,最常用的是獲取當前時間戳,程式碼如下:
//Android獲取當前時間戳
public static Long getCurrentTimestamp() {
return System.currentTimeMillis();
}
夏令時和冬令時
高緯度和中緯度的許多國家為了充分利用夏季的太陽光照,節約照明用電,而又不變動作息時間,實行夏令時。即在夏季到來之前,把時針撥快一個小時,到下半季秋季到來之前,再把時針撥回一個小時。不同國家實行夏令時的時間不太一樣,美國是3月11日至11月7日。
我們國家有段時間也實行了夏令時(1986年-1991年),1992年就不在實行了。
如果App支援國際化功能,也需要考慮夏令時冬令時,Java中提供了方法可以判斷當前時間是否處於夏令時,方法如下:
/**
*@param zone 時區,傳入不同的時區可以判斷不同地區是否處於夏令時
*/
public static boolean isDaylight(TimeZone zone, Date date) {
return zone.useDaylightTime() && zone.isDaylightTime(date);
}
而且java中時間戳的轉換自動支援夏令時冬令時。
時間戳和日期的轉換
下面介紹一下時間戳和日期的相互轉換,以及不同時區間日期的轉換
Date轉換為指定時區的日期字串:
/**
* Date 轉換為指定時區日期字串
*/
public static String date2Str(TimeZone timeZone, Date date, String pattern) {
if (date == null) {
return "";
}
if (timeZone == null) {
timeZone = TimeZone.getDefault();
}
try {
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern, Locale.US);
dateFormat.setTimeZone(timeZone);
return dateFormat.format(date);
} catch (NullPointerException | IllegalArgumentException ex) {
LogUtil.error(ex, ex.getMessage());
ex.printStackTrace();
return "";
}
}
時間戳轉換為指定時區的日期字串
/**
* 時間戳轉換為指定時區日期字串
*/
public static String timeMillis2Str(TimeZone timeZone, long milliSeconds, String pattern) {
if (milliSeconds == 0) {
return "";
}
return date2Str(timeZone, new Date(milliSeconds), pattern);
}
指定時區的字串轉換為時間戳
/**
* 指定時區的日期字串轉換時間戳
*/
public static long str2TimeMillis(TimeZone timeZone, String dateStr, String pattern) {
Date date = str2Date(timeZone, dateStr, pattern);
return date.getTime();
}
從上面幾個方法中可以看出來,時間戳和日期字串主要是通過Date類進行轉換的,那麼Date是什麼呢?
Date物件中儲存的內容並不是年月日時分秒,而是一個long型變數,它的值是自1970.01.01 00:00:00至Date物件記錄時刻經過的毫秒數
,即時間戳的毫秒錶示。呼叫Date的getTime()
方法可以獲取這個值。
Date date = new Date();
System.out.println(date + "," + date.getTime());
總結
本文主要介紹幾個概念:時區、時間戳、夏令時,以及不同時區之間的時間轉換,包括時間戳和指定時區日期之間的轉換,希望對大家有幫助。
寫於2018.04.25下午23:00(位置:深圳南山區)
相關文章
- android短視訊開發,Java程式碼獲取當前時間的時間戳AndroidJava時間戳
- Android 拍照新增時間水印Android
- DateUtils Android時間工具類Android
- Android 程式之間通訊Android
- 事件溯源中的時間和時間建模 - Tomasz Jaskula事件
- python中的時間轉換,秒級時間戳轉string,string轉時間Python時間戳
- Excel中時間戳轉換時間Excel時間戳
- Android 修改系統息屏時間.Android
- Android程式間通訊詳解Android
- Android 時間軸的實現(RecyclerView更簡單)AndroidView
- java中的時間運算Java
- Java 中的時間日期 APIJavaAPI
- Java 中JDK7時間類與JDK8中的時間類JavaJDK
- PAT-B 1026 程式執行時間【時間】
- 在C程式中按照你想要的格式輸出時間:strftime()C程式
- 掌握時間與空間:深入探討Golang中的時間戳與時區轉換Golang時間戳
- Android 校正系統時間的三種解決方案Android
- Android程式間通訊,AIDL工作原理AndroidAI
- Linux 中如何設定每個特定的時間執行特定的程式Linux
- Linux 檢視程式啟動時間、執行時間Linux
- Java中對時間的處理Java
- Python中基礎的時間操作Python
- NSDate 時間比較中的時區問題.
- Android 中的定時任務排程Android
- flink 中window的開窗開始時間、結束時間講解
- Android程式間通訊(複習筆記)Android筆記
- SQL Server中的日期和時間:DATEADD()SQLServer
- LoadRunner中90%響應時間的理解
- Java8中的時間處理Java
- mysql時間操作(時間差和時間戳和時間字串的互轉)MySql時間戳字串
- 簡單程式的時間複雜度分析時間複雜度
- dedeCms 中時間如何呼叫
- qt中實現實時的顯示當前時刻的時間QT
- android中String與InputStream之間的相互轉換方式Android
- 獲取時間戳,幾個時間點的時間戳時間戳
- Android自定義View:快遞時間軸實現AndroidView
- Android 自定義 View 實現橫行時間軸AndroidView
- Android中的多程式、多執行緒Android執行緒