javaタイムゾーンの変換の理解と例の詳細


一、タイムゾーンの基本概念
GMT(Green Wich Mean Time)は、グリニッジ基準の時、東西の経度がゼロになるところです。人々は地球を人为的に24等分して、それぞれの等分は1つのタイムゾーンで、経度15度にまたがって、时间はちょうど1时间です。西の1つのタイムゾーンに行くと、1時間を差し引きます。東のタイムゾーンに行くと、一時間が加算されます。中国は東経120度で、(東経120°-東経0°)の所得度数を15で割ると、8になります。
UTC(Coordinated Universal Time)は、世界協調時間として、平均太陽時(GMTを基準とする)、地軸運動修正後の新時標及び「秒」単位の国際原子時に総合的に計算された時間であり、計算過程は非常に厳密で精密であるため、「世界標準時間」の角度から言えば、GMTより精確である。UTCの本質はGMTより正確な世界時間標準を強調していますが、現行のモデルではGMTとUTCの機能と精度は違いません。
CST時間は次の4つの異なるタイムゾーンを表すことができます。
  • Central Standard Time(USA)UT-6:00
  • Central Standard Time UT+9:30
  • China Standard Time UT+8:00
  • Cuba Standard Time UT-4:00
  • CSTは米国、オーストラリア、中国、キューバの4つの国の基準時間を同時に表示することができます。
    DST(Daylight Saving Time)とは、夏の時間を節約し、夏の太陽が昇るのが比較的早い時に、時計を一時間遅らせて日光を早めに使うことをいい、イギリスではサマータイムといいます。
    PDTやPST、PDTはパシフィック・デイライト・Timeの略語で、米国の夏は毎年4月の第1日曜日から始まり、毎年10月の最後の日曜日までです。サマータイムは通常より1時間早く、PDT時間に対応するのはPST、Pacific Standard Timeです。夏時間制が終わったらPST(太平洋標準時)、西8区と北京時間(東八区)の時差は16時間です。
    二、java中のタイムゾーン
    以下のコードを使って、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タイムゾーンの転換についての理解と実例についての詳しい文章を紹介します。javaタイムゾーンの内容については、以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。