[分享] UTC 時間轉換為中原標準時間的小程式

版主: benwu

分享到: Facebook

[分享] UTC 時間轉換為中原標準時間的小程式

文章mtyjl » 週二 10月 11, 2011 11:18 am


在 Google app engine 上面有 Google 自己的 jdk 實作,
所有 jdk 有關時間的函式庫所產生系統當下的時間都是格林威治標準時間(也就是 UTC, GMT)

討厭的是, Google 似乎沒有按照 jdk 的規格書實作與時間相關的函式庫,
因此網路上所有使用jdk函式庫做時間轉換的範例程式都沒辦法在 GAE 上面產生作用,
換句話說, 若你需要其他時區的當地時間, 就得要自己寫轉換程式才行

因此我寫了格林威治標準時間 轉 其他時區的轉換程式
分享供大家參考
coefficient 是指轉換的 + - 小時數

代碼: 選擇全部
public static Calendar timeTransform(Calendar time, int coefficient) {
      Calendar result = Calendar.getInstance();
      // set second and minute
      result.set(Calendar.SECOND, time.get(Calendar.SECOND));
      result.set(Calendar.MINUTE, time.get(Calendar.MINUTE));
      // set hour
      int hour = (time.get(Calendar.HOUR) + coefficient) % 24;
      if ( hour < 0 ){
         hour = hour + 24;
      }
      result.set(Calendar.HOUR, hour);
      // calculate and set day
      int day = time.get(Calendar.DAY_OF_MONTH);
      int month = time.get(Calendar.MONTH);
      int year = time.get(Calendar.YEAR);
      if ( ( (time.get(Calendar.HOUR) + coefficient) / 24 >= 1) || //next day
          ( (time.get(Calendar.HOUR) + coefficient) % 24 < 0 ) ) { //prev day
         int daysInMonth = 0;
         switch (month) {
         case Calendar.JANUARY:
         case Calendar.MARCH:
         case Calendar.MAY:
         case Calendar.JULY:
         case Calendar.AUGUST:
         case Calendar.OCTOBER:
         case Calendar.DECEMBER:
            daysInMonth = 31;
            break;
         case Calendar.APRIL:
         case Calendar.JUNE:
         case Calendar.SEPTEMBER:
         case Calendar.NOVEMBER:
            daysInMonth = 30;
            break;
         case Calendar.FEBRUARY:
            daysInMonth =
               ((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) == true) ?
                     29 : 28;
            break;
         }
         if ( (time.get(Calendar.HOUR) + coefficient) / 24 >= 1 ){//next day
            if (day < daysInMonth) {
                   day += 1;
            } else {//next month
                   day = 1;
               if (month + 1 != Calendar.DECEMBER) {
                       month += 1;
               } else {//next year
                  month = Calendar.JANUARY;
                  year += 1;
               }
            }
         }
         else {//prev day
            if ( day == 1 ){
               day = daysInMonth;
               if ( month - 1 != Calendar.JANUARY ){
                  month -= 1;
               }else{
                  month = Calendar.DECEMBER;
                  year -= 1;
               }
            }
            else {
               day -= 1;
            }
         }         
      }// finish next day and prev day calculation
        result.set(Calendar.DAY_OF_MONTH, day);       
      result.set(Calendar.MONTH, month);
      result.set(Calendar.YEAR, year);
      return result;
   }
mtyjl
漸有心得的高中生
 
文章: 136
註冊時間: 週六 9月 13, 2008 2:05 pm

Re:[分享] UTC 時間轉換為中原標準時間的小程式

文章lance8537 » 週三 10月 12, 2011 12:29 am

所以說...
可以把它貼在函示庫裡ㄇ???
lance8537
懷疑的國中生
 
文章: 78
註冊時間: 週五 9月 10, 2010 11:04 pm


回到 Google App Engine(GAE)

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客