本文参照RFC 2616中,对日期时间格式的规范翻译
日期/时间 格式(参见RFC 2616)
3.3.1 Full Date
由于历史的原因,HTTP应用允许以下三种不同的格式来表示日期/时间戳:
Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
第一种格式被常用来作为互联网的标准格式,展示一个定长的,由RFC 1123定义的日期时间的子集(在RFC 822 [9]中有更新)。
第二种格式也是常用的,但是是基于已经被废弃的RFC 850 [12] 日期格式,并且它缺少4位的年份表示。
HTTP/1.1客户端和服务器来转换日期值的时候必须接受所有的这三种格式(为了兼容HTTP/1.0),即使它们必须只能生成RFC 1123的格式来表示在header域中HTTP-date的值。
注意:日期值的接收者被鼓励在接受日期值的时候能够具备鲁棒性,因为这些值可能来自于非HTTP的应用,这些情况可能是通过代理/网关发送到SMTP或者NNTP的检索消息或者post消息。
所有的HTTP日期/时间戳必须是以格林威治标准时间展示(GMT),来避免异常。就HTTP的目的来讲,GMT是完全等价于UTC(协调世界时)的。这在前两种格式中有展示,通过包含“GMT”作为一个三个字母的表示时区的后缀,并且当读asctime格式的时候必须被假定。HTTP-date是大小写敏感的,并且必须不能包含额外的超出LWS(Linear White Space),尤其是在语法中包含SP(Space)。
HTTP-date = rfc1123-date | rfc850-date | asctime-date
rfc1123-date = wkday "," SP date1 SP time SP "GMT"
rfc850-date = weekday "," SP date2 SP time SP "GMT"
asctime-date = wkday SP date3 SP time SP 4DIGIT
date1 = 2DIGIT SP month SP 4DIGIT
; day month year (e.g., 02 Jun 1982)
date2 = 2DIGIT "-" month "-" 2DIGIT
; day-month-year (e.g., 02-Jun-82)
date3 = month SP ( 2DIGIT | ( SP 1DIGIT ))
; month day (e.g., Jun 2)
time = 2DIGIT ":" 2DIGIT ":" 2DIGIT
; 00:00:00 - 23:59:59
wkday = "Mon" | "Tue" | "Wed"
| "Thu" | "Fri" | "Sat" | "Sun"
weekday = "Monday" | "Tuesday" | "Wednesday"
| "Thursday" | "Friday" | "Saturday" | "Sunday"
month = "Jan" | "Feb" | "Mar" | "Apr"
| "May" | "Jun" | "Jul" | "Aug"
| "Sep" | "Oct" | "Nov" | "Dec"
注意:HTTP仅在它们用于协议流的时候需要使用日期/时间戳格式,客户端和服务器并不需要使用这些格式来用于用户展示、请求日志等。
3.3.2 Delta Seconds
一些HTTP header域允许一个具体的时间值作为一个表示秒的整数,以十进制表示当消息被接收以后的时间。
delta-seconds = 1*DIGIT
日期和时间规范(参见RFC 822)
5.1语法
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)
5.2 语义
如果包含了日期,那么day-of-week必须是日期规范里暗示的那个day。
时区可能会被表示成多种形式。“UT”是Universal Time(正式称为 Greenwich Mean Time);“GTM”是被允许作为Universal Time的一个引用。军方标准为每一个时区使用一个单一的字符。“Z”是Universal Time。“A”表示早于1小时,“M”表示早于12小时;“N”表示晚于一个小时,“Y”表示晚于12小时。字符“J”没有被使用。其它剩下的两个格式来自于ANSI X3.51-1975标准。一个允许清楚地指示来自于UT的偏移量,另一个使用常见的3个字符的串来表示在北美的时区。
网友评论