Rss 中日期格式的研究

          scud(飛云小俠) http://www.jscud.com 轉(zhuǎn)載請(qǐng)注明來(lái)源/作者

           

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

               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是可以省略的,后面的時(shí)間是要求有時(shí)區(qū)的.

          示例如下(以在中國(guó)的中文操作系統(tǒng)機(jī)器為例):


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

          其實(shí)這個(gè)rfc822應(yīng)該也是電子郵件內(nèi)容格式的規(guī)范,找一個(gè)郵件看看內(nèi)容,也可以看出,郵件的時(shí)間格式也是遵循這個(gè)規(guī)范的.

          要輸入第一種格式,使用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));       
              } 

          注意,其中設(shè)置了時(shí)區(qū)為GMT,否則會(huì)輸出:

           Tue, 16 Aug 2005 23:33:33 CST

          這里的CST意思是代表"中國(guó)時(shí)間",但是一經(jīng)搜索,發(fā)現(xiàn)CST代表了好幾個(gè)時(shí)區(qū),太讓人混亂了.而在RTF822里面,CST僅代表美國(guó)中部時(shí)間.所以如果使用SimpleDateFormat,要設(shè)置時(shí)區(qū)以GMT表示,否則容易讓人迷惑而且不知道是那個(gè)時(shí)區(qū).

          假設(shè)你在中國(guó),想根據(jù)當(dāng)?shù)貢r(shí)間輸入復(fù)合當(dāng)?shù)貢r(shí)間的字符串,讓人一看就能明白文章的日期,那么就使用第二種格式.(我推薦使用第二種方式,當(dāng)然你的頻道主要給外國(guó)朋友瀏覽登除外)

          上面說(shuō)到和郵件有關(guān),于是我們看看JavaMail包里面的javax.mail.internet.MailDateFormat,可以用來(lái)格式化日期:
          (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));        

          輸出結(jié)果為:

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

           Tue, 16 Aug 2005 15:33:33 +0000 (GMT) 
           
           
           
          可以看到相對(duì)RTF822而言,好像多了一個(gè)后面的時(shí)區(qū)的說(shuō)明及其括號(hào).不知道這到底是怎么回事?

          在硬盤上查找一番,發(fā)現(xiàn)在JIRA程序和Confluence中的RSS里都使用了這個(gè)日期格式. 

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

          如果不想使用MailDateFormat的格式,那么就自己寫一個(gè)類來(lái)實(shí)現(xiàn)吧,例如

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

           
          這是最簡(jiǎn)單的了,當(dāng)然可以把MailDateFormat的源碼拿過(guò)來(lái)改改更好一點(diǎn),還不用依賴JavaMail了. :)

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

           


           

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

          評(píng)論

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

          注意:jdk1.4的SimpleDateFormat已經(jīng)支持RTF822的格式了,也就是最后一部分時(shí)區(qū)的字符串+/-0800,jdk1.3的不支持.
            回復(fù)  更多評(píng)論   

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

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          文章發(fā)布許可
          創(chuàng)造共用協(xié)議:署名,非商業(yè),保持一致

          我的郵件
          cnscud # gmail


          常用鏈接

          留言簿(15)

          隨筆分類(113)

          隨筆檔案(103)

          相冊(cè)

          友情鏈接

          技術(shù)網(wǎng)站

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 龙门县| 稻城县| 玛曲县| 孟津县| 重庆市| 垫江县| 许昌县| 乌海市| 荣昌县| 新平| 宁远县| 繁峙县| 遂川县| 华池县| 阜城县| 微山县| 南丰县| 武陟县| 金坛市| 于都县| 筠连县| 南召县| 德安县| 大丰市| 靖远县| 瑞丽市| 建水县| 松溪县| 漠河县| 留坝县| 舒城县| 正宁县| 珲春市| 罗平县| 莱阳市| 普兰县| 麟游县| 二手房| 进贤县| 西华县| 临沭县|