騎豬闖天下

          J2ME隨筆,記錄成長的腳步

          統(tǒng)計(jì)

          留言簿(3)

          閱讀排行榜

          評論排行榜

          [J2ME-原創(chuàng)] 時區(qū)TimeZone和時間

          實(shí)現(xiàn)時間的代碼如下:

              private int minute = 0, hour = 0,second = 0;
              
          private
           String strminute, strhour, strsecond;
             
          /**
              * 畫時間-
              * 
          @param focusTemp
              * 
          @param
           gr
              
          */

             
          public void drawTime(Graphics gr) {
                 Calendar cal  
          =
           Calendar.getInstance();    

                     second 
          =
          cal.get(Calendar.SECOND);        
                  minute 
          =
           cal.get(Calendar.MINUTE);
                  hour 
          =
           cal.get(Calendar.HOUR_OF_DAY);    
                  
                  strsecond 
          =
           Integer.toString(second);        
                  strminute 
          =
           Integer.toString(minute);
                  strhour 
          =
           Integer.toString(hour);
                  
                  
          if(second<10
          )
                      strsecond
          ="0"+
          strsecond;
                  
          if(minute<10
          )
                      strminute
          ="0"+
          strminute;
                  
          if(hour<10
          )
                      strhour
          ="0"+
          strhour;

                  Font aa
          =
          gr.getFont();
                  gr.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM));
                  gr.setColor(
          0xFFD700
          );
                  gr.drawString(strhour 
          + ":" + strminute , SCREEN_WIDTH-5060
          );
                  gr.setFont(aa);
             }

          一般情況下,使用這些就足夠了。

          如果更深一步探索,需要對時區(qū)控制的話,見下面:
          1.這樣獲取的時間,無論電腦上調(diào)試時還是在真機(jī)上,顯示的都是一樣的
          TimeZone china=TimeZone.getTimeZone("GMT+08:00");
                  Calendar cal1  
          =
           Calendar.getInstance(china);    
                  
          int second =
          cal1.get(Calendar.SECOND);        
                  
          int minute =
           cal1.get(Calendar.MINUTE);
                  
          int hour =
           cal1.get(Calendar.HOUR_OF_DAY);    
                  
                  String strsecond 
          =
           Integer.toString(second);        
                  String strminute 
          =
           Integer.toString(minute);
                  String strhour 
          =
           Integer.toString(hour);
                  System.out.println(
          "北京時間 "+strhour + ":" + strminute +":"+strsecond);//GMT+08:00

                  

          TimeZone就是對時區(qū)的控制,

          在Eclipse開發(fā)時,如果不設(shè)置時區(qū)的話,用Calendar獲取的時間是默認(rèn)的格林威治標(biāo)準(zhǔn)時間
          在Eclipse開發(fā)時,如果設(shè)置時區(qū)的話,    用Calendar獲取的時間是設(shè)置的那個時區(qū)的時間

          舉例如下:
          A>. 社區(qū)的設(shè)置
             //獲得實(shí)際手機(jī)使用區(qū)域的默認(rèn)時區(qū)
             TimeZone defaultZone = TimeZone.getDefault();
             
          //獲得默認(rèn)時區(qū)對象的ID標(biāo)識

             System.out.println(defaultZone.getID());//UTC
                  
             
          //取得中國的時區(qū)

                  TimeZone china=TimeZone.getTimeZone("GMT+08:00");
                  System.out.println(china.getID());
          //GMT+08:00

          B >. 時區(qū)不同,時間的不同

                  TimeZone china=TimeZone.getTimeZone("GMT+08:00");
                  System.out.println(china.getID());
          //GMT+08:00

                  prompt3=china.getID();
                  
                  Calendar cal1  
          =
           Calendar.getInstance(china);    
                  
          int second =
          cal1.get(Calendar.SECOND);        
                  
          int minute =
           cal1.get(Calendar.MINUTE);
                  
          int hour =
           cal1.get(Calendar.HOUR_OF_DAY);    
                  
                  String strsecond 
          =
           Integer.toString(second);        
                  String strminute 
          =
           Integer.toString(minute);
                  String strhour 
          =
           Integer.toString(hour);
                  System.out.println(
          "東八時區(qū)ID"+prompt3);//GMT+08:00

                  System.out.println("北京時間 "+strhour + ":" + strminute +":"+strsecond);//
              
                  
                  
                  TimeZone defatime 
          =
          TimeZone.getDefault();
                  System.out.println(defatime.getID());
          //GMT+08:00

                  prompt4=defatime.getID();
                  
                  Calendar cal2  
          =
           Calendar.getInstance(defatime);    
                  second 
          =
          cal2.get(Calendar.SECOND);        
                  minute 
          =
           cal2.get(Calendar.MINUTE);
                  hour 
          =
           cal2.get(Calendar.HOUR_OF_DAY);    
                  
                  strsecond 
          =
           Integer.toString(second);        
                  strminute 
          =
           Integer.toString(minute);
                  strhour 
          =
           Integer.toString(hour);
                  System.out.println(
          "默認(rèn)時區(qū)ID"+prompt4);//UTC

                  System.out.println("默認(rèn)時間 "+strhour + ":" + strminute +":"+strsecond);//
          這兩個時間,在手機(jī)上顯示的是一樣的,但是在Eclipse開發(fā)時,是相差8個小時的。

          應(yīng)用:
          在電腦上的模擬器上,正因?yàn)闀r區(qū)id不同,可以作為簡單的反模擬器使用的一個方法,只要時區(qū)id不同,就不然程序啟動。

          2.API中的使用方法:
          返回 TimeZonejava.util 中的方法
          static TimeZone TimeZone.getDefault()
                    獲取此主機(jī)的默認(rèn) TimeZone
           TimeZone Calendar.getTimeZone()
                    獲得時區(qū)。
           TimeZone GregorianCalendar.getTimeZone()
                     
          static TimeZone TimeZone.getTimeZone(String ID)
                    獲取給定 ID 的 TimeZone
           

          參數(shù)類型為 TimeZonejava.util 中的方法
          static Calendar Calendar.getInstance(TimeZone zone)
                    使用指定時區(qū)和默認(rèn)語言環(huán)境獲得一個日歷。
          static Calendar Calendar.getInstance(TimeZone zone, Locale aLocale)
                    使用指定時區(qū)和語言環(huán)境獲得一個日歷。
           boolean TimeZone.hasSameRules(TimeZone other)
                    如果此區(qū)域和另一個區(qū)域具有相同的規(guī)則和偏移量,也就是說,如果此區(qū)域只可能在 ID 上與另一個區(qū)域不同,則返回 true。
           boolean SimpleTimeZone.hasSameRules(TimeZone other)
                    如果此時區(qū)與另一時區(qū)具有相同的規(guī)則和偏移量,則返回 true
          static void TimeZone.setDefault(TimeZone zone)
                    設(shè)置由 getDefault 方法返回的 TimeZone
           void Calendar.setTimeZone(TimeZone value)
                    使用給定的時區(qū)值來設(shè)置時區(qū)。
           void GregorianCalendar.setTimeZone(TimeZone zone)
                     
           

          參數(shù)類型為 TimeZonejava.util 中的構(gòu)造方法
          Calendar(TimeZone zone, Locale aLocale)
                    構(gòu)造一個帶有指定時區(qū)和語言環(huán)境的 Calendar。
          GregorianCalendar(TimeZone zone)
                    在具有默認(rèn)語言環(huán)境的給定時區(qū)內(nèi)構(gòu)造一個基于當(dāng)前時間的 GregorianCalendar
          GregorianCalendar(TimeZone zone, Locale aLocale)
                    在具有給定語言環(huán)境的給定時區(qū)內(nèi)構(gòu)造一個基于當(dāng)前時間的 GregorianCalendar



          3.TimeZone時區(qū)的擴(kuò)展知識

          java.util.TimeZone,

          API簡述:

          TimeZone
          表示時區(qū)偏移量,也可以計(jì)算夏令時。

          通常,使用 getDefault 獲取 TimeZonegetDefault 基于程序運(yùn)行所在的時區(qū)創(chuàng)建 TimeZone。例如,對于在日本運(yùn)行的程序,getDefault 基于日本標(biāo)準(zhǔn)時間創(chuàng)建 TimeZone 對象。

          也可以用 getTimeZone 及時區(qū) ID 獲取 TimeZone 。例如美國太平洋時區(qū)的時區(qū) ID 是 "America/Los_Angeles"。因此,可以使用下面語句獲得美國太平洋時間 TimeZone 對象:

           TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
          
          可以使用 getAvailableIDs 方法來對所有受支持的時區(qū) ID 進(jìn)行迭代。可以選擇受支持的 ID 來獲得 TimeZone。如果想要的時區(qū)無法用受支持的 ID 之一表示,那么可以指定自定義時區(qū) ID 來生成 TimeZone。自定義時區(qū) ID 的語法是:
           CustomID:
                   GMT Sign Hours : Minutes
          GMT Sign Hours Minutes
          GMT Sign Hours
          Sign: 下面之一
          + -
          Hours:
          Digit
          Digit Digit
          Minutes:
          Digit Digit
          Digit: 下面之一
          0 1 2 3 4 5 6 7 8 9
          
          Hours 必須在 0 至 23 之間,Minutes 必須在 00 至 59 之間。例如,"GMT+10" 和 "GMT+0010" 分別意味著比 GMT 提前 10 小時和 10 分鐘。

          格式是與區(qū)域無關(guān)的,并且數(shù)字必須取自 Unicode 標(biāo)準(zhǔn)的 Basic Latin 塊。沒有夏令時轉(zhuǎn)換安排可以用自定義時區(qū) ID 指定。如果指定的字符串與語法不匹配,就使用 "GMT"

          當(dāng)創(chuàng)建一個 TimeZone 時,指定的自定義時區(qū) ID 采用下面的語法進(jìn)行標(biāo)準(zhǔn)化:

           NormalizedCustomID:
                   GMT Sign TwoDigitHours : Minutes
          Sign: 下面之一
          + -
          TwoDigitHours:
          Digit Digit
          Minutes:
          Digit Digit
          Digit: 下面之一
          0 1 2 3 4 5 6 7 8 9
          
          例如,TimeZone.getTimeZone("GMT-8").getID() 返回 "GMT-08:00"。
          GMT簡介:

          GMT(Greenwich Mean Time)是格林尼治平時:

            由于地球軌道并非圓形,其運(yùn)行速度又隨著地球與太陽的距離改變而出現(xiàn)變化,因此視太陽時欠缺均勻性。視太陽日的長度同時亦受到地球自轉(zhuǎn)軸相對軌道面的傾斜度所影響。為著要糾正上述的不均勻性,天文學(xué)家計(jì)算地球非圓形軌跡與極軸傾斜對視太陽時的效應(yīng)。平太陽時就是指經(jīng)修訂后的視太陽時。在格林尼治子午線上的平太陽時稱為世界時(UT0),又叫格林尼治平時(GMT)。

            格林尼治標(biāo)準(zhǔn)時間

            格林尼治標(biāo)準(zhǔn)時間(GMT,舊譯“格林威治平均時間”或“格林威治標(biāo)準(zhǔn)時間”)是指位于倫敦郊區(qū)的皇家格林尼治天文臺的標(biāo)準(zhǔn)時間,因?yàn)楸境踝游缇€被定義在通過那里的經(jīng)線。

            理論上來說,格林尼治標(biāo)準(zhǔn)時間的正午是指當(dāng)太陽橫穿格林尼治子午線時(也就是在格林尼治上空最高點(diǎn)時)的時間。由于地球在它的橢圓軌道里的運(yùn)動速度不均勻,這個時刻可能和實(shí)際的太陽時相差16分鐘。

            地球每天的自轉(zhuǎn)是有些不規(guī)則的,而且正在緩慢減速。所以,格林尼治時間已經(jīng)不再被作為標(biāo)準(zhǔn)時間使用。現(xiàn)在的標(biāo)準(zhǔn)時間——協(xié)調(diào)世界時(UTC)——由原子鐘提供。

            自1924年2月5日開始,格林尼治天文臺每隔一小時會向全世界發(fā)放調(diào)時信息。

            中文維基百科的編輯歷史記錄時間,采用的就是格林尼治標(biāo)準(zhǔn)時間。
           

          [End]  騎豬闖天下

          posted on 2010-04-14 15:59 騎豬闖天下 閱讀(10414) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 乐山市| 渭源县| 简阳市| 利川市| 肇庆市| 灌云县| 广河县| 达孜县| 宜川县| 原平市| 通辽市| 博罗县| 耒阳市| 长武县| 龙里县| 博湖县| 卓尼县| 乌鲁木齐市| 同江市| 平顶山市| 罗江县| 蕉岭县| 上虞市| 正定县| 广河县| 淳安县| 恭城| 安阳县| 灵寿县| 云龙县| 上饶市| 安多县| 昔阳县| 铜鼓县| 庆城县| 凌海市| 亳州市| 梁平县| 九龙城区| 临夏市| 泾阳县|