摘要:一時區的基本概念,即格林威治標準時,是東西經零度的地方。時間卻同時可以代表如下個不同的時區可見,可以同時表示美國,澳大利亞,中國,古巴四個國家的標準時間。以及是的縮寫,美國夏季始于每年月的第個周日,止于每年月的最后一個周日。
一、時區的基本概念
GMT(Greenwich Mean Time),即格林威治標準時,是東西經零度的地方。人們將地球人為的分為24等份,每一等份為一個時區,每時區橫跨經度15度,時間正好為1小時。往西一個時區,則減去一小時;往東一個時區,則加上一小時。中國在東經120度上,(東經120°-東經0°)所得度數再除以15,即得8。
UTC(Coordinated Universal Time),即世界協調時間,是經過平均太陽時(以格林威治時間GMT為準)、地軸運動修正后的新時標以及以「秒」為單位的國際原子時所綜合精算而成的時間,計算過程相當嚴謹精密,因此若以「世界標準時間」的角度來說,UTC比GMT來得更加精準。UTC的本質強調的是比GMT更為精確的世界時間標準,不過對于現行表款來說,GMT與UTC的功能與精確度是沒有差別的。
CST時間卻同時可以代表如下 4 個不同的時區:
Central Standard Time (USA) UT-6:00
Central Standard Time (Australia) UT+9:30
China Standard Time UT+8:00
Cuba Standard Time UT-4:00
可見,CST可以同時表示美國,澳大利亞,中國,古巴四個國家的標準時間。
DST(Daylight Saving Time),夏日節約時間,指在夏天太陽升起的比較早時,將時鐘撥快一小時,以提早日光的使用,在英國則稱為夏令時間(Summer Time)。
PDT以及PST, PDT 是 Pacific Daylight Time 的縮寫,美國夏季始于每年4月的第1個周日,止于每年10月的最后一個周日。夏令時比正常時間早一小時,與PDT時間相對應的是PST , Pacific Standard Time 。 夏時制結束后就是PST(太平洋標準時間),西八區,與北京時間(東八區)時差-16個小時。
二、java中的時區
可以用以下code,列出java中的時區
String ids[] = TimeZone.getAvailableIDs(); for(String id: ids) { System.out.println(id); }
注意:你會發現在PDT不在該時區列表里
如果要用PDT,用PST作為時區可以得到準確的時間,即使是夏令時
TimeZone timeZone = TimeZone.getTimeZone("PST"); Calendar calendar = new GregorianCalendar(); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.HOUR, 0); calendar.set(2018, 5, 10);// 輸出 Sun Jun 10 15:00:00 CST 2018 //calendar.set(2018, 2, 10); // 輸出 Sat Mar 10 16:00:00 CST 2018 calendar.setTimeZone(timeZone); System.out.println(calendar.getTime());
如果要獲得某個時區是否使用了DST,可以用useDaylightTime
boolean isUsingDST = TimeZone.getTimeZone("America/Los_Angeles").useDaylightTime(); System.out.println(isUsingDST);
如果要判斷某個時間在某個時區是否發生了DST,可以用
Calendar calendarServer=Calendar.getInstance(); calendarServer.add(Calendar.DATE, 1); boolean isUsingDST = clientTimeZone.inDaylightTime(calendarServer.getTime()); System.out.println(isUsingDST);
獲取當前時區和UTC的偏移量,在當前時間5月13日(發生了DLS)比較getRawOffset() 和getOffset()
TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));//將timezone設定到發生夏令時的地區 int rowOffSet = TimeZone.getDefault().getRawOffset(); int offSet = TimeZone.getDefault().getOffset(System.currentTimeMillis()); System.out.println(offSet + " " + offSet/3600000 ); // -7 hours System.out.println(rowOffSet + " " + rowOffSet/3600000); // -8 hours
以下是時區轉化的例子
Date date = new Date(1359641834000L);// 2013-1-31 22:17:14 String dateStr = "2013-3-31 22:17:14"; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); dateFormat.setTimeZone(TimeZone.getTimeZone("CST"));// CST = GMT - 6(Central Standard Time (USA)而不是北京標準時間) try { // 指該字串以CST來換算,所以實際時間是2013-1-31 22:17:14 CST(GMT - 6),輸出是以host的時區(GMT+8)進行format,所以加14 Date dateTmp = dateFormat.parse(dateStr); boolean isUsingDST = TimeZone.getTimeZone("CST").inDaylightTime(dateTmp); System.out.println(isUsingDST);// 輸出true,因此減1個小時 System.out.println(dateTmp);//輸出 Fri Feb 01 11:17:14 CST 2013 } catch(ParseException e) { e.printStackTrace(); } String dateStrTmp = dateFormat.format(date);//數字是絕對時間,如果以host時區(GMT+8)來format就是22:17,這個數字以CST/GMT-6時區來format,就是-14 System.out.println(dateStrTmp);// 輸出 2013-01-31 08:17:14
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69371.html
Date-Time Java SE 8發行版中引入的Date-Time包java.time提供了全面的日期和時間模型,是在JSR 310:Date and Time API下開發的,盡管java.time基于國際標準化組織(ISO)日歷系統,但也支持常用的全球日歷。 此課程介紹了使用基于ISO的類來表示日期和時間以及操作日期和時間值的基本原理。 概述 時間似乎是一個簡單的主題,即便是便宜的手表也能...
摘要:合并日期和時間這個復合類名叫,是和的合體。截至目前,我們介紹的這些日期時間對象都是不可修改的,這是為了更好地支持函數式編程,確保線程安全,保持領域模式一致性而做出的重大設計決定。 新的日期和時間API Java的API提供了很多有用的組件,能幫助你構建復雜的應用。不過,Java API也不總是完美的。我們相信大多數有經驗的程序員都會贊同Java 8之前的庫對日期和時間的支持就非常不理想...
摘要:時間與日期處理從屬于筆者的現代開發系列文章,涉及到的引用資料聲明在學習與實踐資料索引中。可以通過靜態構造方法很容易的創建,定義了與之間的轉化關系時差類以年月日來表示日期差,而以秒與毫秒來表示時間差適用于處理與機器時間。 Java 時間與日期處理 從屬于筆者的現代 Java 開發系列文章,涉及到的引用資料聲明在 Java 學習與實踐資料索引中。 Java 時間與日期處理 在 Java 8...
摘要:前言前面一篇文章寫了如何安全的使用里面介紹了如何處理日期時間,以及如何保證線程安全,及其介紹了在中的處理時間日期默認就線程安全的類。引入了全新的日期時間格式工具,線程安全而且使用方便。 前言 前面一篇文章寫了《SimpleDateFormat 如何安全的使用?》, 里面介紹了 SimpleDateFormat 如何處理日期/時間,以及如何保證線程安全,及其介紹了在 Java 8 中的處...
閱讀 2471·2023-04-25 21:41
閱讀 1647·2021-09-22 15:17
閱讀 1921·2021-09-22 10:02
閱讀 2433·2021-09-10 11:21
閱讀 2569·2019-08-30 15:53
閱讀 996·2019-08-30 15:44
閱讀 946·2019-08-30 13:46
閱讀 1125·2019-08-29 18:36