Rss 中日期格式的研究

          scud(飛云小俠) http://www.jscud.com 轉載請注明來源/作者

           

          rss中日期格式要求遵守rfc822規范,其中是這么寫的:

               date-time   =  [ day "," ] date time        ; dd mm yy
                                                           ;  hh:mm:ss zzz
          
               day         =  "Mon"  / "Tue" /  "Wed"  / "Thu"
                           /  "Fri"  / "Sat" /  "Sun"
          
               date        =  1*2DIGIT month 2DIGIT        ; day month year
                                                           ;  e.g. 20 Jun 82
          
               month       =  "Jan"  /  "Feb" /  "Mar"  /  "Apr"
                           /  "May"  /  "Jun" /  "Jul"  /  "Aug"
                           /  "Sep"  /  "Oct" /  "Nov"  /  "Dec"
          
               time        =  hour zone                    ; ANSI and Military
          
               hour        =  2DIGIT ":" 2DIGIT [":" 2DIGIT]
                                                           ; 00:00:00 - 23:59:59
          
               zone        =  "UT"  / "GMT"                ; Universal Time
                                                           ; North American : UT
                           /  "EST" / "EDT"                ;  Eastern:  - 5/ - 4
                           /  "CST" / "CDT"                ;  Central:  - 6/ - 5
                           /  "MST" / "MDT"                ;  Mountain: - 7/ - 6
                           /  "PST" / "PDT"                ;  Pacific:  - 8/ - 7
                           /  1ALPHA                       ; Military: Z = UT;
                                                           ;  A:-1; (J not used)
                                                           ;  M:-12; N:+1; Y:+12
                           / ( ("+" / "-") 4DIGIT )        ; Local differential
                                                           ;  hours+min. (HHMM)
          

           



          可以看出,前面的星期X是可以省略的,后面的時間是要求有時區的.

          示例如下(以在中國的中文操作系統機器為例):


           1.Tue, 16 Aug 2005 15:33:33 GMT
           2.Tue, 16 Aug 2005 23:33:33 +0800

          其實這個rfc822應該也是電子郵件內容格式的規范,找一個郵件看看內容,也可以看出,郵件的時間格式也是遵循這個規范的.

          要輸入第一種格式,使用SimpleDateFormat格式化即可,代碼如下

              public static void test1(Date date)
              {
                  SimpleDateFormat sdfTemp = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss z",Locale.US);
                 
                  SimpleTimeZone aZone = new SimpleTimeZone(8,"GMT");       
                  sdfTemp.setTimeZone(aZone);
                 
                  System.out.println(sdfTemp.format(date));       
              } 

          注意,其中設置了時區為GMT,否則會輸出:

           Tue, 16 Aug 2005 23:33:33 CST

          這里的CST意思是代表"中國時間",但是一經搜索,發現CST代表了好幾個時區,太讓人混亂了.而在RTF822里面,CST僅代表美國中部時間.所以如果使用SimpleDateFormat,要設置時區以GMT表示,否則容易讓人迷惑而且不知道是那個時區.

          假設你在中國,想根據當地時間輸入復合當地時間的字符串,讓人一看就能明白文章的日期,那么就使用第二種格式.(我推薦使用第二種方式,當然你的頻道主要給外國朋友瀏覽登除外)

          上面說到和郵件有關,于是我們看看JavaMail包里面的javax.mail.internet.MailDateFormat,可以用來格式化日期:
          (MyEclipse 3.8.4附帶的J2EE 1.3中的JavaMail包)

                  MailDateFormat mdf = new MailDateFormat();
                 
                  SimpleTimeZone aZone = new SimpleTimeZone(8,"GMT");       
                  //mdf.setTimeZone(aZone);      
                 
                  System.out.println(mdf.format(date));        

          輸出結果為:

           Tue, 16 Aug 2005 23:33:33 +0800 (CST)
           
          如果設置了時區為GMT,則輸出:

           Tue, 16 Aug 2005 15:33:33 +0000 (GMT) 
           
           
           
          可以看到相對RTF822而言,好像多了一個后面的時區的說明及其括號.不知道這到底是怎么回事?

          在硬盤上查找一番,發現在JIRA程序和Confluence中的RSS里都使用了這個日期格式. 

          注意到這個不同,我瀏覽了一下outlook Express里面的郵件,發現兩種時間格式的郵件都存在,真是讓人迷惑,或許都可以吧,呵呵 :)

          如果不想使用MailDateFormat的格式,那么就自己寫一個類來實現吧,例如

           public class RssDateFormat extends MailDateFormat
           {
               public RssDateFormat()
               {
                   applyPattern("EEE, d MMM yyyy HH:mm:ss ’XXXXX’");       
               }
           
           } 

           
          這是最簡單的了,當然可以把MailDateFormat的源碼拿過來改改更好一點,還不用依賴JavaMail了. :)

          至此,我的RSS中的日期終于正確而且讓我滿意了. :)

           


           

          posted on 2005-08-17 18:11 Scud(飛云小俠) 閱讀(1304) 評論(1)  編輯  收藏 所屬分類: Java

          評論

          # re: Rss 中日期格式的研究 2005-08-18 22:09 scud

          注意:jdk1.4的SimpleDateFormat已經支持RTF822的格式了,也就是最后一部分時區的字符串+/-0800,jdk1.3的不支持.
            回復  更多評論   

          <2005年8月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          導航

          統計

          公告

          文章發布許可
          創造共用協議:署名,非商業,保持一致

          我的郵件
          cnscud # gmail


          常用鏈接

          留言簿(15)

          隨筆分類(113)

          隨筆檔案(103)

          相冊

          友情鏈接

          技術網站

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 临沭县| 黔南| 九龙城区| 石嘴山市| 吉安县| 临洮县| 景东| 遂川县| 芜湖市| 乾安县| 民丰县| 凤庆县| 湖北省| 长顺县| 北川| 夹江县| 乐安县| 张家川| 台州市| 鄯善县| 新干县| 鄂托克前旗| 大洼县| 周宁县| 防城港市| 常州市| 莱芜市| 四会市| 宣汉县| 五指山市| 长子县| 淳安县| 南京市| 无为县| 榆社县| 合作市| 临高县| 霍邱县| 涿鹿县| 甘泉县| 乐昌市|