成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

java轉(zhuǎn)換時(shí)區(qū)時(shí)間過程詳解

這篇文章主要介紹了java轉(zhuǎn)換時(shí)區(qū)時(shí)間過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

成都創(chuàng)新互聯(lián)公司專注于原平企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站開發(fā)。原平網(wǎng)站建設(shè)公司,為原平等地區(qū)提供建站服務(wù)。全流程定制制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

一丶時(shí)區(qū)

由于世界各國(guó)家與地區(qū)經(jīng)度不同,地方時(shí)也有所不同,因此會(huì)劃分為不同的時(shí)區(qū)。

地球是自西向東自轉(zhuǎn),東邊比西邊先看到太陽(yáng),東邊的時(shí)間也比西邊的早。東邊時(shí)刻與西邊時(shí)刻的差值不僅要以時(shí)計(jì),而且還要以分和秒來(lái)計(jì)算,這給人們帶來(lái)不便。

為了克服時(shí)間上的混亂,1884年在華盛頓召開的一次國(guó)際經(jīng)度會(huì)議(又稱國(guó)際子午線會(huì)議)上,規(guī)定將全球劃分為24個(gè)時(shí)區(qū)(東、西各12個(gè)時(shí)區(qū))。規(guī)定英國(guó)(格林尼治天文臺(tái)舊址)為中時(shí)區(qū)(零時(shí)區(qū))、東1—12區(qū),西1—12區(qū)。每個(gè)時(shí)區(qū)橫跨經(jīng)度15度,時(shí)間正好是1小時(shí)。最后的東、西第12區(qū)各跨經(jīng)度7.5度,以東、西經(jīng)180度為界。每個(gè)時(shí)區(qū)的中央經(jīng)線上的時(shí)間就是這個(gè)時(shí)區(qū)內(nèi)統(tǒng)一采用的時(shí)間,稱為區(qū)時(shí),相鄰兩個(gè)時(shí)區(qū)的時(shí)間相差1小時(shí)。

計(jì)算的區(qū)時(shí)=已知區(qū)時(shí)-(已知區(qū)時(shí)的時(shí)區(qū)-要計(jì)算區(qū)時(shí)的時(shí)區(qū))。(注:東時(shí)區(qū)為正,西時(shí)區(qū)為負(fù))

例1:已知東京(東九區(qū))時(shí)間為5月1日12:00,求北京(東八區(qū))的區(qū)時(shí)。
  北京時(shí)間=12:00-(9-8)=11:00,即北京時(shí)間為5月1日11:00。
  例2:已知北京時(shí)間為5月1日12:00,求倫敦(中時(shí)區(qū))的區(qū)時(shí)。
  倫敦時(shí)間=12:00-(8-0)=4:00,即倫敦時(shí)間為5月1日4:00。

二丶UTC時(shí)間 與 格林尼治時(shí)間

協(xié)調(diào)世界時(shí),又稱世界統(tǒng)一時(shí)間、世界標(biāo)準(zhǔn)時(shí)間、國(guó)際協(xié)調(diào)時(shí)間。由于英文(CUT)和法文(TUC)的縮寫不同,作為妥協(xié),簡(jiǎn)稱UTC。

         格林尼治標(biāo)準(zhǔn)時(shí)間(Greenwich Mean Time,GMT)是指位于倫敦郊區(qū)的皇家格林尼治天文臺(tái)的標(biāo)準(zhǔn)時(shí)間,因?yàn)楸境踝游缇€被定義在通過那里的經(jīng)線。 理論上來(lái)說,格林尼治標(biāo)準(zhǔn)時(shí)間的正午是指當(dāng)太陽(yáng)橫穿格林尼治子午線時(shí)的時(shí)間。由于地球在它的橢圓軌道里的運(yùn)動(dòng)速度不均勻,這個(gè)時(shí)刻可能和實(shí)際的太陽(yáng)時(shí)相差16分鐘。 地球每天的自轉(zhuǎn)是有些不規(guī)則的,而且正在緩慢減速。所以,格林尼治時(shí)間已經(jīng)不再被作為標(biāo)準(zhǔn)時(shí)間使用?,F(xiàn)在的標(biāo)準(zhǔn)時(shí)間——協(xié)調(diào)世界時(shí)(UTC)——由原子鐘提供。 自1924年2月5日開始,格林尼治天文臺(tái)每隔一小時(shí)會(huì)向全世界發(fā)放調(diào)時(shí)信息。而UTC是基于標(biāo)準(zhǔn)的GMT提供的準(zhǔn)確時(shí)間。

GMT(Greenwich Mean Time)——格林尼治標(biāo)準(zhǔn)時(shí)間,格林尼治標(biāo)準(zhǔn)時(shí)間是19 世紀(jì)中葉大英帝國(guó)的基準(zhǔn)時(shí)間,同時(shí)也是事實(shí)上的世界基準(zhǔn)時(shí)間。當(dāng)時(shí)主要為了1840 年之后的鐵路系統(tǒng)服務(wù)。它以格林尼治天文臺(tái)的經(jīng)線為0 度經(jīng)線,將世界分為24 個(gè)時(shí)區(qū)。為了方便,在不需要精確到秒的情況下,通常將GMT 和UTC 視作等同。但UTC 更加科學(xué)更加精確,它是以原子時(shí)為基礎(chǔ),在時(shí)刻上盡量接近世界時(shí)的一種時(shí)間計(jì)量系統(tǒng)。它的出現(xiàn)是現(xiàn)代社會(huì)對(duì)于精確計(jì)時(shí)的需要。

三丶夏令時(shí)

夏令時(shí),表示為了節(jié)約能源,人為規(guī)定時(shí)間的意思。也叫夏時(shí)制,夏時(shí)令(Daylight Saving Time:DST),又稱“日光節(jié)約時(shí)制”和“夏令時(shí)間”,在這一制度實(shí)行期間所采用的統(tǒng)一時(shí)間稱為“夏令時(shí)間”。一般在天亮早的夏季人為將時(shí)間調(diào)快一小時(shí),可以使人早起早睡,減少照明量,以充分利用光照資源,從而節(jié)約照明用電。各個(gè)采納夏時(shí)制的國(guó)家具體規(guī)定不同。目前全世界有近110個(gè)國(guó)家每年要實(shí)行夏令時(shí)。

中國(guó)已不使用夏令時(shí).

四丶區(qū)時(shí)轉(zhuǎn)換

計(jì)算區(qū)時(shí)(時(shí)間) - 已知區(qū)時(shí)(時(shí)間) = 計(jì)算時(shí)區(qū) - 已知區(qū)時(shí)的時(shí)區(qū).

所以, 計(jì)算區(qū)時(shí)(時(shí)間)= 已知區(qū)時(shí)(時(shí)間) + 計(jì)算時(shí)區(qū) - 已知區(qū)時(shí)的時(shí)區(qū).

需要注意的是, 有的地區(qū)在夏季使用夏令時(shí), 即時(shí)鐘會(huì)撥快一個(gè)小時(shí).

DateUtils.java

/**
   * 將本地時(shí)間, 轉(zhuǎn)換成目標(biāo)時(shí)區(qū)的時(shí)間
   * @param sourceDate
   * @param targetZoneId {@link ZoneIds}
   * @return
   */
  public static Date convertTimezone(Date sourceDate, String targetZoneId){
    return convertTimezone(sourceDate, TimeZone.getTimeZone(targetZoneId));
  }

  public static Date convertTimezone(Date sourceDate, String sourceZoneId, String targetZoneId){
    TimeZone sourceTimeZone=TimeZone.getTimeZone(sourceZoneId);
    TimeZone targetTimeZone=TimeZone.getTimeZone(targetZoneId);

    return convertTimezone(sourceDate, sourceTimeZone, targetTimeZone);
  }

  /**
   * 將本地時(shí)間,轉(zhuǎn)換成對(duì)應(yīng)時(shí)區(qū)的時(shí)間
   * @param localDate
   * @param targetTimezone 轉(zhuǎn)換成目標(biāo)時(shí)區(qū)所在的時(shí)間
   * @return
   */
  public static Date convertTimezone(Date localDate, TimeZone targetTimezone){
    return convertTimezone(localDate, TimeZone.getDefault(), targetTimezone);
  }


  /**
   * 將sourceDate轉(zhuǎn)換成指定時(shí)區(qū)的時(shí)間
   * @param sourceDate
   * @param sourceTimezone sourceDate所在的時(shí)區(qū)
   * @param targetTimezone 轉(zhuǎn)化成目標(biāo)時(shí)間所在的時(shí)區(qū)
   * @return
   */
  public static Date convertTimezone(Date sourceDate, TimeZone sourceTimezone, TimeZone targetTimezone){


    // targetDate - sourceDate=targetTimezone-sourceTimezone
    // --->
    // targetDate=sourceDate + (targetTimezone-sourceTimezone)


    Calendar calendar=Calendar.getInstance();    // date.getTime() 為時(shí)間戳, 為格林尼治到系統(tǒng)現(xiàn)在的時(shí)間差,世界各個(gè)地方獲取的時(shí)間戳是一樣的,    // 格式化輸出時(shí),因?yàn)樵O(shè)置了不同的時(shí)區(qū),所以輸出不一樣
    long sourceTime=sourceDate.getTime(); 


    calendar.setTimeZone(sourceTimezone);
    calendar.setTimeInMillis(sourceTime);// 設(shè)置之后,calendar會(huì)計(jì)算各種filed對(duì)應(yīng)的值,并保存

    //獲取源時(shí)區(qū)的到UTC的時(shí)區(qū)差
    int sourceZoneOffset=calendar.get(Calendar.ZONE_OFFSET);


    calendar.setTimeZone(targetTimezone);
    calendar.setTimeInMillis(sourceTime);

    int targetZoneOffset=calendar.get(Calendar.ZONE_OFFSET);
    int targetDaylightOffset=calendar.get(Calendar.DST_OFFSET); // 夏令時(shí)


    long targetTime=sourceTime+ (targetZoneOffset+targetDaylightOffset) -sourceZoneOffset;

    return new Date(targetTime); 

  }

ZoneIds.java

/**
 *
 * @see java.time.ZoneId#SHORT_IDS
 * @author TimFruit
 * @date 19-11-2 下午6:02
 */
public class ZoneIds {

  /*
  EST - -05:00
HST - -10:00
MST - -07:00
ACT - Australia/Darwin
AET - Australia/Sydney
AGT - America/Argentina/Buenos_Aires
ART - Africa/Cairo
AST - America/Anchorage
BET - America/Sao_Paulo
BST - Asia/Dhaka
CAT - Africa/Harare
CNT - America/St_Johns
CST - America/Chicago
CTT - Asia/Shanghai
EAT - Africa/Addis_Ababa
ECT - Europe/Paris
IET - America/Indiana/Indianapolis
IST - Asia/Kolkata
JST - Asia/Tokyo
MIT - Pacific/Apia
NET - Asia/Yerevan
NST - Pacific/Auckland
PLT - Asia/Karachi
PNT - America/Phoenix
PRT - America/Puerto_Rico
PST - America/Los_Angeles
SST - Pacific/Guadalcanal
VST - Asia/Ho_Chi_Min
   */

  public static final String UTC="Z";// utc國(guó)際時(shí)間

  public static final String DEFAULT=TimeZone.getDefault().toZoneId().getId();

  public static final String BEIJING="Asia/Shanghai"; //也可以使用"+8" 北京在東8區(qū)




  //
//  UTC+10 夏莫羅標(biāo)準(zhǔn)時(shí)區(qū)
//  UTC-11 美屬薩摩亞標(biāo)準(zhǔn)時(shí)區(qū)
//  UTC-10HST夏威夷-阿留申標(biāo)準(zhǔn)時(shí)區(qū)
//  UTC-9AKST阿拉斯加標(biāo)準(zhǔn)時(shí)區(qū)
//  UTC-8PST太平洋標(biāo)準(zhǔn)時(shí)區(qū)
//  UTC-7MST山地標(biāo)準(zhǔn)時(shí)區(qū)
//  UTC-6CST中部標(biāo)準(zhǔn)時(shí)區(qū)
//  UTC-5EST東部標(biāo)準(zhǔn)時(shí)區(qū)
//  UTC-4AST大西洋標(biāo)準(zhǔn)時(shí)區(qū)

  //https://baike.baidu.com/item/%E7%BE%8E%E5%9B%BD%E6%97%B6%E9%97%B4/3163209?fr=aladdin
  /*
  太平洋時(shí)區(qū):代表城市洛杉磯,與北京相差16小時(shí);
山地時(shí)區(qū):代表城市鹽湖城,與北京相差15小時(shí);
中部時(shí)區(qū):代表城市芝加哥,與北京相差14小時(shí);
東部時(shí)區(qū):代表城市紐約、華盛頓,與北京相差13小時(shí);
夏威夷時(shí)區(qū):代表城市:火奴魯魯,與北京相差18小時(shí);
阿拉斯加時(shí)區(qū):代表城市:費(fèi)爾班克斯,與北京相差17小時(shí)。
   */
  public static final String US_EST="-5"; //東部標(biāo)準(zhǔn)時(shí)區(qū)
  public static final String US_CST="-6";// 中部標(biāo)準(zhǔn)時(shí)區(qū)
  public static final String US_MST="-7";// 山地標(biāo)準(zhǔn)時(shí)區(qū)
  public static final String US_PST="America/Los_Angeles"; //也可以使用"-8" 太平洋標(biāo)準(zhǔn)時(shí)區(qū)


  public static final String JST="Asia/Tokyo";//日本東京
}

測(cè)試:

@Test
  public void convertTimezonePstNowTest(){
    // 太平洋時(shí)區(qū):代表城市洛杉磯,與北京相差16小時(shí);
    // 但由于實(shí)行夏令時(shí), 夏季會(huì)快一個(gè)小時(shí)
    Date now=new Date();

    convertTimeZonePstTest(now);

  }


  @Test
  public void convertTimezonePstTest1(){
    // 太平洋時(shí)區(qū):代表城市洛杉磯,與北京相差16小時(shí);
    // 但由于實(shí)行夏令時(shí), 夏季會(huì)快一個(gè)小時(shí)
    Date now=DateUtils.parse("2019-11-03 03:00:00");
    convertTimeZonePstTest(now);

    now=DateUtils.parse("2019-11-03 06:00:00");
    convertTimeZonePstTest(now);

    now=DateUtils.parse("2019-11-03 09:00:00");
    convertTimeZonePstTest(now);

    now=DateUtils.parse("2019-11-03 11:00:00");
    convertTimeZonePstTest(now);

    now=DateUtils.parse("2019-11-03 14:00:00");
    convertTimeZonePstTest(now);

    now=DateUtils.parse("2019-11-03 16:00:00");
    convertTimeZonePstTest(now);

    now=DateUtils.parse("2019-11-03 18:00:00");
    convertTimeZonePstTest(now);

    now=DateUtils.parse("2019-11-03 19:00:00");
    convertTimeZonePstTest(now);

    now=DateUtils.parse("2019-11-03 20:00:00");
    convertTimeZonePstTest(now);

    now=DateUtils.parse("2019-11-03 23:00:00");
    convertTimeZonePstTest(now);
  }


  private void convertTimeZonePstTest(Date sourceDate){
    Date target=DateUtils.convertTimezone(sourceDate, ZoneIds.US_PST);
    long sub=sourceDate.getTime()-target.getTime();
    System.out.println("北京時(shí)間與洛杉磯時(shí)間相差時(shí)間: "+sub/(60*60*1000) +" 小時(shí)");


    //由于有夏令時(shí), 使用jdk提供的方法驗(yàn)證
    SimpleDateFormat pstSdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    pstSdf.setTimeZone(TimeZone.getTimeZone(ZoneIds.US_PST));
    String expectFormat=pstSdf.format(sourceDate);

    String targetFormat=DateUtils.format(target);
    System.out.println("洛杉磯時(shí)間: "+targetFormat);
    Assert.assertEquals(expectFormat,targetFormat);
  }

java轉(zhuǎn)換時(shí)區(qū)時(shí)間過程詳解

java轉(zhuǎn)換時(shí)區(qū)時(shí)間過程詳解

java轉(zhuǎn)換時(shí)區(qū)時(shí)間過程詳解

完整源碼

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

當(dāng)前文章:java轉(zhuǎn)換時(shí)區(qū)時(shí)間過程詳解
轉(zhuǎn)載來(lái)于:http://jinyejixie.com/article26/gpiscg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、、網(wǎng)站營(yíng)銷、面包屑導(dǎo)航、搜索引擎優(yōu)化網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管
缙云县| 巨鹿县| 大田县| 尼木县| 和顺县| 大城县| 额尔古纳市| 江陵县| 普兰店市| 阿拉善左旗| 安庆市| 内黄县| 罗源县| 库伦旗| 金沙县| 吴江市| 三原县| 北海市| 呼玛县| 康马县| 陵川县| 泉州市| 新津县| 萨嘎县| 屏东县| 宁波市| 克东县| 沁源县| 准格尔旗| 招远市| 姜堰市| 张家口市| 乌苏市| 牟定县| 双牌县| 安阳市| 永济市| 肇庆市| 舒兰市| 梁平县| 贺兰县|