首页 > 其他分享 >时间格式标准/专题及相关RFC、规范

时间格式标准/专题及相关RFC、规范

时间:2022-10-13 22:05:02浏览次数:95  
标签:专题 SP RFC 日期 时间 格式 GMT

1、多种日期时间格式

以下的日历表大家应该最熟悉不过了,我们经常在网络上查询日期,大多是如下格式显示的。

时间格式标准/专题及相关RFC、规范_git

其中有两种日期格式

阳历:2020-1-17 10:48

农历:二零一九年腊月二十三

虽然阳历接近于国际化的格式,农历则是我们本土化的(localization,一些编程语言里包命名的时候经常携程I10n,为了方便书写)的习惯。

外国人需要思维转换一下才能看懂这个日期。

触类旁通:还有一些日期,受宗教及本土文化影响,偏本土化的,大家看起来比较费力,这在沟通上也不方便,例如泰历,日本历法,台湾省历法。

1、1泰历

在佛历2412年,泰国拉玛五世皇曾定4月1日为元旦日,后来直到西历1940年12月24日,多国与泰国政府协商,经慎重考虑以后,由当时的国务院长宣布,

从1941年起,改定西历1月1日为元旦日,并一直沿用至今。

1、1、1佛历换算公式:

  佛历年-543年=公历年

  公历年+543年=佛历

1、2日本历法

日本历是日本使用的历法,以前日本一直使用中国农历。使用中国的元嘉历、麟德历(在日本叫做仪凤历)、大衍历、五纪历、宣明历。之后,使用日本独自

作的贞享历、宝历历、宽政历、天保历。1868年明治维新后,于1873年废除天保历,改为使用格里历,废除旧历新年,但民间占卜、算命和春分上坟仍依照天保历。

1、2、1年号纪年

日本历和格里历的唯一不同是纪年法,日本仍然采用中国的帝位纪年法,每位新天皇即位更改年号,例如2008年是明仁天皇的“平成20年”。由于国际交往的增多,

在商业和外交上也使用公元纪年,但钱币印刷、公文来往仍然使用天皇年号。

 

1、2、2节句

从中国传入日本的节日叫做“节句”,古时遵从中国习惯,日期按农历计算,在日本把日期改到公历。

元旦 - 元旦/正月/元日。公历1月1日。

人日 - 七草の节句(七草节)。公历1月7日。

上巳 - 桃の节句(​​樱花​​节)/雏祭り(女儿节)。公历3月3日。

端午 - 端午の节句(端午节)/子供の日(儿童节)。公历5月5日。

七夕 - 七夕。公历7月7日。

重阳 - 菊の节句(菊花节)。公历9月9日。

 

1、2、3杂节

随从二十四节气的日本自己的节日叫“杂节”。

节分 - 立春前日。2月3日左右。

彼岸 - 包括春分、秋分的1个星期。

社日 - 春分、秋分最近的戊日。

八十八夜 - 从立春88天。5月2日左右。

入梅 - 太阳通过黄经80度的日子。6月11日左右。

半夏生 - 太阳通过黄经100度的日子。7月2日左右。

土用 - 一般只指夏土用。

春土用 : 从黄经27度到立夏(黄经45度)

夏土用 : 从黄经117度到立秋(黄经135度)

秋土用 : 从黄经207度到立冬(黄经225度)

冬土用 : 从黄经297度到立春(黄经315度)

二百十日 从立春210天。9月1日左右。

二百二十日 - 从立春220天。9月11日左右。

 

限于篇幅不再一一列举

 

1、3台湾省历法

  台湾使用​​民国纪年​​,台湾时间日期计法有

       西元年份减1911=​​民国纪年​​​       ​​西元纪年​​也会一并使用

      公文使用国历
     一般​​民间信仰​​会参考农民历做为行事依据

   比如说民国70年,对应的西元时间是1981年

   台历与各国、朝代计算方法:​​http://sinocal.sinica.edu.tw/​

时间格式标准/专题及相关RFC、规范_git_02

 

 


下面我们就来了解一下日期时间相关的规范和标准

2、RFC822

​RFC822: Standard for ARPA Internet Text Messages​​(ARPA 互联网文本消息的标准),即电子邮件信息标准,主要是用于电子邮件格式的报文。

它包括两个主要的组成部分:邮件头和邮件体,以下是一段标准的报文:

例程1  test.eml

Return-Path: <[email protected]>

Delivered-To: [email protected]

Received: from smtp.sina.com.cn (unknown [202.108.3.177])

by sohumx139.sohu.com (Postfix) with SMTP id E4F9802C1249

for <[email protected]>; Thu, 10 Nov 2005 16:39:50 +0800 (CST)

Received: (qmail 49221 invoked from network); 10 Nov 2005 08:39: 33 -0000

Received: from unknown (HELO it315?test) (218.246.5.151)

by smtp.sina.com.cn with SMTP; 10 Nov 2005 08:39:33 -0000

From: [email protected]

To: [email protected]

subject:test

Message-Id: <[email protected]>

Date: Thu, 10 Nov 2005 16:39:50 +0800 (CST)

Status: RO

X-UIDL: 1131611863.21509_77.mx72



test!!!

如果使用Wireshark等工具抓过STMP包的朋友应该能比较熟悉这段报文(本篇文章不讲究邮件报文,主要讲日期时间)。

上面有好几段英文日期时间格式,对于英文一般或者不懂的朋友看起来费劲。

以下是不同语言处理RFC822日期时间的一些文章(有本人整理、翻译、摘录):

2、1 协议相关标准

     2、1、1 语法:

日期时间    =  [ 天 "," ] 日期 时间            ; dd笔者注:天为可选,可以不输入)
; hh:mm:ss zzz

天 = "Mon" / "Tue" / "Wed" / "Thu"
/ "Fri" / "Sat" / "Sun"

日期 = 2位数字 英文单词简写月 2个数字 ; 天 月 年
; 例如: 20 Jun 82

月 = "Jan" / "Feb" / "Mar" / "Apr"
/ "May" / "Jun" / "Jul" / "Aug"
/ "Sep" / "Oct" / "Nov" / "Dec"

时间 = 小时 时区 ; ANSI及军方标准

小时 = 2位数字 ":" 2位数字 [":" 2位数字] ; (笔者注:秒为可选,可以不输入)
; 00:00:00 - 23:59:59

时区 = "UT" / "GMT" ; 世界时间
; 北美时间 : UT
/ "EST" / "EDT" ; 东部时间: - 5 / - 4
/ "CST" / "CDT" ; 中部时间: - 6 / - 5
/ "MST" / "MDT" ; 山地时间: - 7/ - 6
/ "PST" / "PDT" ; 太平洋时间: - 8/ - 7
/ 1ALPHA ; 军方时间: Z = UT;
; A:-1; (J暂未使用)
; M:-12; N:+1; Y:+12
/ ( ("+" / "-") 4位数字) ; 表示具有时间的相对差异(笔者注:时区偏移)
; hours+min. (HHMM)
如果包括,则星期数必须是日期规范所隐含的日期。

时区可能以多种方式表示。"UT"是通用时间(以前称为"格林威治平均时间");
"GMT"允许作为世界时间的参考。军事标准对每个区域使用单个字符。
"Z"是通用时间。"A"表示提前一小时,"M"表示提前 12 小时;"N"是一小时后,而"Y"是 12。一个允许显式指示从 UT 的偏移量;
另一个使用常见的 3 字符字符串来指示北美的时区。

局限于笔者的英文能力,大家可以到​​https://www.w3.org/Protocols/rfc822/#z28​​了解详情。

     2、1、2 MSDN:RFC 822: Date and Time Specification

  本节定义了 RFC 822 消息中使用的日期和时间的语法和语义。例如,枚举一周中的天和一年中的几个月,

  时间定义为:

      

time = hour zone ; ANSI and Military

hour = 2DIGIT ":" 2DIGIT [":" 2DIGIT] ; 00:00:00 - 23:59:59

时区格式:

zone = "UT" / "GMT"  
/ "EST" / "EDT"

2、2 相关文章

C#.我该如何分析和转换日期时间的到RFC 822的日期,时间格式(How do I parse and convert DateTime’s to the RFC 822 date-time format?)

Convert a date to the RFC822 standard for use in RSS feeds(在RSS源中间日期转换成RFC822标准使用)

c语言将时间戳转换成RFC822格式时间​

java RFC822中将字符串转成Date

RFC850

格式:星期几 "," 2位数天-英文月份简写-2位数年 time "GMT"

示例数据:Tue,03-Jul-1204:40:59GMT

RFC1036

格式:EEEEEEEEE, dd-MMM-yy HH:mm:ss z

示例数据:Sunday, 06-Nov-94 08:49:37 GMT

RFC1123

该协议日期时间格式的定义是RFC822的升级;相对于RFC822,将2位数年份改成4位数。

格式:DAY, DD MON YYYY hh:mm:ss GMT

示例数据:Sun, 21 Oct 2018 12:16:24 GMT

笔者理解:应该是在2000年出现以后,防止两位数年份防止产生错误/歧义

参考资料:

java中将RFC1123日期时间格式化

RFC1945

该协议规范并未对日期时间做出定义,只是引用了RFC协议中关于时间的定义

出于历史原因,HTTP/1.0应用允许三种格式来表示时间戳:

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

第一种格式是首选的Internet标准格式,表示方法长度固定(RFC1123[6])。第二种格
式在普通情况下使用,但是它是基于已经废弃的RFC850[10]中的日期格式,而且年不是用
四位数字表示的。HTTP/1.0 客户端及服务器端在解析日期时可识别全部三种格式,但是它
们不可以产生第三种时间格式(asctime) 。
注意:对于接收到由非HTTP应用产生的日期数据时,提倡对接收到的日期值进行填充。
这样做是因为,在某些时候,代理或网关可能通过SMTP或NNTP来获取或发送消息。
所有的HTTP/1.0 date/timp时间戳必须用世界时间(Universal Time,UT),即格林威治
时间来表示(Greenwich Mean Time,GMT),没有任何修改的余地。前面的两种格式用了
“GMT”表示时区,在读ASC表示的时间时,也应假定是这个时区。

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要求只能在协议流中使用data/time时间戳格式,不要求客户端及服务
器端在用户描述、请求登录等情况下使用这类格式。

摘自:超文本传输协议 -- HTTP/1.0

组织:中国互动出版网(http://www.china-pub.com/)

RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:[email protected]
译者:黄晓东(黄晓东 [email protected]

RFC2822

RFC3339

RFC7231

According to the ​​RFC 7231​​, HTTP dates must be expressed in GMT. So expressing dates with offsets from UTC don't seem to be valid valid.

 HTTP日期必须用GMT表示,UTC偏移量表示日期似乎无效了。

参考:​​https://stackoverflow.com/questions/54927845/what-is-valid-rfc1123-date-format​

ISO8601

标签:专题,SP,RFC,日期,时间,格式,GMT
From: https://blog.51cto.com/u_296714/5754710

相关文章