I'm happy to live!

          Develop with pleasure!

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            39 隨筆 :: 2 文章 :: 31 評論 :: 0 Trackbacks
              在我的項目中,用戶會選擇自已的時區,所以顯示的時間都是根據用戶選擇的時區來顯示時間的,而時間我存入數據庫時我打算是轉成格林威治時間,然后從庫里取出時間后又根據用戶的選擇來轉成對應時區的時間
          但現在卻碰到一些問題,如何將對應時區的時間轉成格林威治時間呢?

          以下是我的部分代碼:
          DateFormat df = DateFormat.getDateTimeInstance(DateFormat.LONG,
                          DateFormat.LONG);
                  Calendar cal 
          = Calendar.getInstance();

                  TimeZone tz 
          = TimeZone.getTimeZone("America/Los_Angeles");

                  df.setTimeZone(tz);
                  String time 
          = df.format(new Date());
                  System.out.println(time);
                  Date date 
          = df.parse(time, new ParsePosition(0));
                  System.out.println(date);
          為何df.parse()后返回的date又成了當前系統的時間了啊,我如何把當前用戶時區的時間轉換成格林威治時間呢,謝謝牛人們?
          posted on 2011-01-05 07:31 Norsor 閱讀(1698) 評論(3)  編輯  收藏 所屬分類: programme

          評論

          # re: 關于時間的一些疑問? 2011-01-05 11:41 何楊
          Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("London"));

          int hour12 = cal.get(Calendar.HOUR); // 0..11
          int minutes = cal.get(Calendar.MINUTE); // 0..59
          int seconds = cal.get(Calendar.SECOND); // 0..59

          System.out.println(hour12+":"+minutes+":"+seconds);

          以上是Java Almanac 1.4中找到的。  回復  更多評論
            

          # re: 關于時間的一些疑問? 2011-01-05 20:59 Rene
          因為你只用了一個DateFormat,等于是在同一個時區內轉換。

          format: 把Date對象基于DateFormat時區轉換成字符串
          parse: 把字符串基于DateFormat時區轉換成當前時區的Date對象
          比如:用戶地區為中國(GMT+8),DateFormat時區為GMT,時間字符串:2011/01/05 12:00:00
          parse后的結果是 Wed Jan 05 13:00:00 CET 2011

          SimpleDateFormat dbFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
          dbFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
          dbFormat.format(localDate);
          可以獲得當前時間的GMT時區日期字符串。
          如果要獲得Date對象,要基于用戶時區做parse轉換

          完整例子:
          import java.text.ParseException;
          import java.text.SimpleDateFormat;
          import java.util.Date;
          import java.util.TimeZone;

          public class CalendarTest {
          public static void main (String[] args) {
          SimpleDateFormat localFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
          SimpleDateFormat dbFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
          dbFormat.setTimeZone(TimeZone.getTimeZone("GMT"));

          Date localDate = new Date();
          System.out.println("Local: "+localDate);

          // Solution one to get a date object
          try {
          Date GMTDate = localFormat.parse(dbFormat.format(localDate));
          System.out.println("1. GMT: "+GMTDate);
          } catch (ParseException e) {
          e.printStackTrace();
          }

          //Solution two to get a simple String
          System.out.println("2. GMT: "+dbFormat.format(localDate));
          }
          }  回復  更多評論
            

          # re: 關于時間的一些疑問? 2011-01-05 21:07 Rene
          @何楊
          建議使用"GMT",用London的話有夏令時問題,夏令時期間就是GMT+1了  回復  更多評論
            

          主站蜘蛛池模板: 霞浦县| 绿春县| 棋牌| 加查县| 义乌市| 南京市| 昌邑市| 惠水县| 漯河市| 民乐县| 横峰县| 阿巴嘎旗| 瓮安县| 吉安市| 和静县| 沂水县| 疏勒县| 介休市| 阳新县| 通辽市| 平乐县| 深水埗区| 稻城县| 昭苏县| 石柱| 河北区| 河南省| 崇仁县| 定陶县| 阳谷县| 河池市| 恩平市| 共和县| 桃江县| 巴东县| 丰顺县| 临汾市| 黑水县| 利辛县| 乳源| 峡江县|