正 文:
对于RSS2.0标准下的时间格式要求比较严格,必须遵守
rfc822标准。比如<pubDate>Fri, 22 Feb 2008 15:49:18 GMT</pubDate>这样的格式。而一般的国内的服务器时间都是形如2008-2-22 15:49:18这样的格式,显然不满足标准,这也是导致很多feed读取不到文章发表时间的原因。
在RSS1.0和ATOM当中,对于时间的格式并没有非常严格的规定,例如“2008-2-22 15:49:18”这样的格式是完全可以被识别的。但在RSS2.0中,这种时间格式就不能被识别。在ASP程序中,时间无法直接转换成满足rfc822标准的格式,所以很多博客系统直接采用了默认的时间格式。
其实通过一个小函数,就可以完美转换符合标准的时间函数了,参考一下
呆若木鸡改的一个函数:
'时间转换函数,符合rfc822标准
Function return_RFC822_Date(byVal myDate, byVal TimeZone)
Dim myDay, myDays, myMonth, myYear
Dim myHours, myMinutes, mySeconds
myDate = CDate(myDate)
myDay = EnWeekDayName(myDate)
myDays = Right("00" & Day(myDate),2)
myMonth = EnMonthName(myDate)
myYear = Year(myDate)
myHours = Right("00" & Hour(myDate),2)
myMinutes = Right("00" & Minute(myDate),2)
mySeconds = Right("00" & Second(myDate),2)
return_RFC822_Date = myDay&", "& _
myDays&" "& _
myMonth&" "& _
myYear&" "& _
myHours&":"& _
myMinutes&":"& _
mySeconds&" "& _
" " & TimeZone
End Function
'星期转换函数
Function EnWeekDayName(InputDate)
Dim Result
Select Case WeekDay(InputDate,1)
Case 1:Result="Sun"
Case 2:Result="Mon"
Case 3:Result="Tue"
Case 4:Result="Wed"
Case 5:Result="Thu"
Case 6:Result="Fri"
Case 7:Result="Sat"
End Select
EnWeekDayName = Result
End Function
'月份转换函数
Function EnMonthName(InputDate)
Dim Result
Select Case Month(InputDate)
Case 1:Result="Jan"
Case 2:Result="Feb"
Case 3:Result="Mar"
Case 4:Result="Apr"
Case 5:Result="May"
Case 6:Result="Jun"
Case 7:Result="Jul"
Case 8:Result="Aug"
Case 9:Result="Sep"
Case 10:Result="Oct"
Case 11:Result="Nov"
Case 12:Result="Dec"
End Select
EnMonthName = Result
End Function
通过上面的这个asp函数,就可以简单实现时间的转换。
但是,这里我的博客系统的rss在Feedsky烧制后出现了问题。就是时间在烧制后提前了8个小时。举例说明,我的博客的feed的rss地址是:
http://www.piaoyi.org/rss.asp,某文章的发表时间是Fri, 22 Feb 2008 15:49:18 GMT;在Feedsky烧制的页面是:
http://feed.piaoyi.org/,然而这里的时间却提前了8小时,变成Fri, 22 Feb 2008 23:49:18 +0800。可以看出,Feedsky把GMT变成+0800,提前8个小时。
看了一下rfc822标准里关于时区的解释:
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)
问题就出在了
飘易博客的时间采用了GMT,而中国采用的时间是北京时间,即东8区。整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated)。UTC与格林尼治平均时(GMT, Greenwich Mean Time)一样,都与英国伦敦的本地时相同,UTC与GMT含义完全相同。
所以,只要把博客的时间采用东八区就可以了。可以调用这样的形式,return_RFC822_Date("&rs("时间字段")&","+0800"),就可以了,问题解决了。如果你对本博客感兴趣,欢迎
订阅我们的内容。