国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Java時區(qū)轉(zhuǎn)換及時間格式

本文介紹Java API 中 Date, Calendar, TimeZone和DateFormat的使用,以及不同時區(qū)時間相互轉(zhuǎn)化的方法和原理。

 

問題描述:

向處于不同時區(qū)的服務(wù)器發(fā)請求時需要考慮時區(qū)轉(zhuǎn)換的問題。譬如,服務(wù)器位于東八區(qū)(北京時間,GMT+8:00),而身處東四區(qū)的用戶想要查詢當天的銷售記錄。則需把東四區(qū)的“今天”這個時間范圍轉(zhuǎn)換為服務(wù)器所在時區(qū)的時間范圍。

 

Tips1. GMT時間:即格林威治平時(Greenwich Mean Time)。平太陽時是與視太陽時對應(yīng)的,由于地球軌道非圓形,運行速度歲地球與太陽距離改變而出現(xiàn)變化,因此視太陽時欠缺均勻性。為了糾正這種不均勻性,天文學(xué)家計算地球非圓形軌跡與極軸傾斜對視太陽時的效應(yīng)。平太陽時就是指經(jīng)修訂之后的視太陽時。在格林威治子午線上的平太陽時稱為世界時(UTC),又叫格林威治平時(GMT)。

 

類Date表示特定的瞬間,精確到毫秒。獲得一個表示當前時間的Date對象有兩種方式:

 

Java代碼  
  1. 1. Date date = new Date();  
  2. 2. Date date = Calendar.getInstance().getTime();  

Date對象本身所存儲的毫秒數(shù)可以通過date.getTime()方法得到;該函數(shù)返回自1970年1月1日 00:00:00 GMT以來此對象表示的毫秒數(shù)。

 

Calendar的getInstance()方法有參數(shù)為TimeZone和Locale的重載,可以使用指定時區(qū)和語言環(huán)境獲得一個日歷。無參則使用默認時區(qū)和語言環(huán)境獲得日歷。

 

TimeZone表示時區(qū)偏移量,本質(zhì)上以毫秒數(shù)保存與GMT的差值。獲取TimeZone可以通過時區(qū)ID,如"America/New_York",也可以通過GMT+/-hh:mm來設(shè)定。例如北京時間可以表示為GMT+8:00。

TimeZone.getRawOffset()方法可以用來得到當前時區(qū)的標準時間到GMT的偏移量。上段提到的"America/New_York"和"GMT+8:00"兩個時區(qū)的偏移量分別為-18000000和28800000。

 

于是問題就簡單了,在時區(qū)間轉(zhuǎn)換時間時,首先用原時間減掉原時間所在時區(qū)相對于GMT的偏移量,得到原時間相對與GMT的值,再加上目標時區(qū)相對GMT的偏移量即可。

這樣得到的結(jié)果依然是毫秒數(shù),需要按照指定日期格式重新轉(zhuǎn)換成Date對象。

 

Java代碼  
  1. import java.text.*;    
  2. import java.util.*;    
  3.   
  4. public class DateTransformer  
  5. {  
  6.     public static final String DATE_FORMAT = "MM/dd/yyyy HH:mm:ss";  
  7.          
  8.     public static String dateTransformBetweenTimeZone(Date sourceDate, DateFormat formatter,  
  9.         TimeZone sourceTimeZone, TimeZone targetTimeZone) {  
  10.         Long targetTime = sourceDate.getTime() - sourceTimeZone.getRawOffset() + targetTimeZone.getRawOffset();  
  11.         return DateTransformer.getTime(new Date(targetTime), formatter);  
  12.     }  
  13.          
  14.     public static String getTime(Date date, DateFormat formatter){  
  15.        return formatter.format(date);  
  16.     }  
  17.          
  18.     public static void main(String[] args){  
  19.         DateFormat formatter = new SimpleDateFormat(DATE_FORMAT);  
  20.         Date date = Calendar.getInstance().getTime();  
  21.         TimeZone srcTimeZone = TimeZone.getTimeZone("EST");  
  22.         TimeZone destTimeZone = TimeZone.getTimeZone("GMT+8");  
  23.         System.out.println(DateTransformer.dateTransformBetweenTimeZone(date, formatter, srcTimeZone, destTimeZone));  
  24.     }  
  25. }  

Tips2. 字面大數(shù)字賦值給long類型變量的問題

上面函數(shù)中的targetTime是計算得來的,測試用例中我們可能需要通過毫秒數(shù)來構(gòu)建幾個日期對象,但是在賦值long time = 1374004799999 時會提示錯誤“The literal1374004799999 of type int is out of range”。代碼中的數(shù)字字面值是int類型,因此超出了長度。在大數(shù)字后面加個'L',long time = 1374004799999L即可正確賦值。 

 

DateFormat是是日期/時間格式化子類的抽象類,它以與語言無關(guān)的方式格式化并解析日期或時間。日期/時間格式化子類(如 SimpleDateFormat)允許進行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和標準化。將日期表示為 Date 對象,或者表示為從 GMT(格林尼治標準時間)1970 年 1 月 1 日 00:00:00 這一刻開始的毫秒數(shù)。SimpleDateFormat則是一個以與語言環(huán)境有關(guān)的方式來格式化和解析日期的具體類,可以以“日期和時間模式”字符串指定日期和時間格式。我們函數(shù)中所用模式字符串為"MM/dd/yyyy HH:mm:ss",則輸出日期:"07/16/2013 04:00:00"

 

其他常見的模式字母定義如下:

字母日期或時間元素表示示例
GEra 標志符TextAD
yYear199696
M年中的月份MonthJulyJul07
w年中的周數(shù)Number27
W月份中的周數(shù)Number2
D年中的天數(shù)Number189
d月份中的天數(shù)Number10
F月份中的星期Number2
E星期中的天數(shù)TextTuesdayTue
aAm/pm 標記TextPM
H一天中的小時數(shù)(0-23)Number0
k一天中的小時數(shù)(1-24)Number24
Kam/pm 中的小時數(shù)(0-11)Number0
ham/pm 中的小時數(shù)(1-12)Number12
m小時中的分鐘數(shù)Number30
s分鐘中的秒數(shù)Number55
S毫秒數(shù)Number978
z時區(qū)General time zonePacific Standard TimePSTGMT-08:00
Z時區(qū)RFC 822 time zone-0800

 

References:

1. Java API 1.6 

2. Java時區(qū)的轉(zhuǎn)換 

3. java時區(qū)-DateFormat和TimeZone關(guān)系 

4. java獲取當前時區(qū)的時間

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
PHP 時區(qū)如何設(shè)置
徹底弄懂GMT、UTC、時區(qū)和夏令時
使用JavaScript和Google時區(qū)API顯示任何城市的本地時間
java編程實現(xiàn)獲取時間和時區(qū)設(shè)置
SpringBoot接口返回的數(shù)據(jù)時間與實際相差8小時問題排查
高級JAVA開發(fā)必備技能:java8 新日期時間API((一)JSR-310:ZoneId 時區(qū)和偏移量)(JAVA 小虛竹)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服