中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java如何實現時區轉換

發布時間:2020-07-17 17:33:32 來源:億速云 閱讀:284 作者:小豬 欄目:開發技術

小編這次要給大家分享的是java如何實現時區轉換,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

一、時區的基本概念

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

看完這篇關于java如何實現時區轉換的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临湘市| 炉霍县| 漠河县| 福海县| 衡阳市| 隆安县| 新宁县| 三明市| 怀柔区| 香格里拉县| 红原县| 卫辉市| 柳林县| 鹤庆县| 金溪县| 清涧县| 安丘市| 二连浩特市| 安康市| 司法| 徐州市| 庆城县| 吴江市| 马尔康县| 上饶县| 内乡县| 醴陵市| 江门市| 清水县| 宁陕县| 白银市| 永德县| 永川市| 永福县| 万年县| 南昌市| 绍兴县| 兴城市| 东乌珠穆沁旗| 文水县| 舟曲县|