我正在处理一个 API,它请求 RFC 1123 日期。如果我发送日期为 Thu, 04 Sep 2014 06:42:22 UTC
的请求它因为 "UTC"
而被拒绝部分。如果我操纵字符串并制作时区部分 "GMT"
有用。
我还注意到许多语言(Java、C#、Python)都使用时区字符串 "GMT"
以 RFC 1123 格式格式化 UTC 日期。但是我使用的语言 Go 将其保留为 "UTC"
.
我试图了解这是语言错误还是 "UTC"
根据 RFC 根本不应该使用:http://www.ietf.org/rfc/rfc1123.txt
最佳答案
简答
使用UT
或 GMT
但不是 UTC
.
RFC 1123
我对 RFC 1123 的阅读是它对日期时间格式采用 RFC 822,除了调整。
RFC 822
RFC 822不包含单词 UTC
.相反,第 25 页指的是 UT
是 GMT
的同义词.所以你也许可以使用UT
但不是 UTC
.
RFC 2822
此外,RFC 822 被 RFC 2822 取代。 (是的,可爱的编号)。该规范在定义时区偏移时只提到了一次 UTC。但是这个规范没有添加UTC
作为格式中的标识符。所以同样的规则,只使用 GMT
或 UT
在你的字符串中。
ISO 8601
RFC 822 和 1123 定义的这种格式很糟糕。难以阅读,难以解析,假定英语语言和文化,错误地定义了错误方向的军事时区,错误地将 UT 与 GMT 等同起来,指的是含糊不清的世界时,因为有多种 UT 与 UTC 是一,并鼓励使用 3 或 4 个字母代码来表示既不标准化也不唯一的时区的不良做法。
如果可能,请使用 ISO 8601相反,正如所讨论的 here朱卡“丝兰”科尔佩拉。该标准在 RFC 822 发布几年后被 ISO 采用。 ISO 8601 更为明智,并且正在被现代协议(protocol)和商业/工业中采用。
ISO 8601 格式示例:
2014-09-06T13:35:58-02:00
2014-09-06T15:35:58Z
编程如果与 Go 捆绑的库正在生成
UTC
对于该格式不正确,我建议您提交错误报告。java.time
仅供引用,Java 包含行业领先的日期时间框架 java.time类。这些类内置于 Java 8 及更高版本,[向后移植到 Java 6 和 7][5] 和 [Android][6]。在 [OpenJDK][7] 项目中以开源形式提供。
java.time 类使用 ISO 8601解析/生成字符串以表示其日期时间值时的默认格式。
此外,[
DateTimeFormatter
][8] 类提供了专门为 https://www.rfc-editor.org/rfc/rfc1123, DateTimeFormatter.RFC_1123_DATE_TIME
提供的格式化程序生成字符串,例如 Tue, 3 Jun 2008 11:05:30 GMT
.请参阅此示例 [IdeOne.com 中的实时代码][9]。
Instant instant = Instant.now() ; // Current moment in UTC.
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ; // A wrapper around Instant, more flexible such as formatting.
DateTimeFormatter f = DateTimeFormatter.RFC_1123_DATE_TIME ;
String output = odt.format( f ) ;
instant.toString(): 2016-11-15T21:12:49.261Z
odt.toString(): 2016-11-15T21:12:49.261Z
output: Tue, 15 Nov 2016 21:12:49 GMT
关于 java.time
java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy日期时间类,例如
java.util.Date
, Calendar
, & SimpleDateFormat
.Joda-Time项目,现在在 maintenance mode , 建议迁移到 java.time类。
要了解更多信息,请参阅 Oracle Tutorial .并在 Stack Overflow 上搜索许多示例和解释。规范为 JSR 310 .
您可以直接与您的数据库交换 java.time 对象。使用 JDBC driver符合 JDBC 4.2或更晚。不需要字符串,不需要
java.sql.*
类。从哪里获得 java.time 类?
ThreeTen-Extra项目通过附加类扩展了 java.time。该项目是 future 可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如
Interval
, YearWeek
, YearQuarter
, 和 more .[5]:http://www.threeten.org/threetenbp/ )
[6]:https://github.com/JakeWharton/ThreeTenABP
[7]:http://openjdk.java.net
[8]:http://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html?is-external=true
[9]:http://ideone.com/PI5vlu
关于datetime - "UTC"是 RFC 1123 规范的有效时区名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25658897/