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 View中Background載入的時間分析AndroidView
- Android 中如何計算 App 的啟動時間?AndroidAPP
- Android中如何計算App的啟動時間?AndroidAPP
- android短視訊開發,Java程式碼獲取當前時間的時間戳AndroidJava時間戳
- Android 手寫 Binder 教你理解 android 中的程式間通訊Android
- Android 手寫Binder 教你理解android中的程式間通訊Android
- Android 時間戳和日期之間的轉化Android時間戳
- Android程式間的通訊Android
- 事件溯源中的時間和時間建模 - Tomasz Jaskula事件
- Android中為何獲取系統時間的方法多次執行後時間仍不變,解決方法Android
- Java 中的時間日期 APIJavaAPI
- java中的時間運算Java
- mysql中的時間函式MySql函式
- javascript中的時間運算JavaScript
- Java 中JDK7時間類與JDK8中的時間類JavaJDK
- Android 拍照新增時間水印Android
- DateUtils Android時間工具類Android
- Android開機時間分析Android
- 掌握時間與空間:深入探討Golang中的時間戳與時區轉換Golang時間戳
- android系統日期時間的獲取Android
- js計算兩個時間點時間間隔的程式碼例項JS
- Java中如何得到檔案的建立時間&最後修改時間Java
- Java中對時間的處理Java
- Perl中本地時間和UNIX時間戳間相互轉換時間戳
- python中的時間轉換,秒級時間戳轉string,string轉時間Python時間戳
- 時間小人程式碼
- 計算php程式執行時間的程式PHP
- Android 程式間通訊Android
- 程式執行時間的測量
- 程式設計師的時間估算程式設計師
- Android中的定時器AlarmManagerAndroid定時器
- Android程式間的跳轉問題Android
- 在C程式中按照你想要的格式輸出時間:strftime()C程式
- Android 具有左右滑動功能的時間軸Android
- Java8中的時間處理Java
- Python中基礎的時間操作Python
- sql server中對時間日期的操作SQLServer
- ASP.Net中的時間處理ASP.NET