日期字符串中的字母分隔符是什么(除了分隔)?

时间:2014-02-17 20:04:30

标签: bash date

我正在使用bash 4.1。我使用一个字母来分隔由date转换的日期字符串的日期和时间字段。看起来每个字母会导致不同的值(从-5到+18)添加到指定的时间。但请注意J会导致错误。我无法在maninfo页面中找到有关此行为的说明。有人可以开导我吗?

$ date -d 2014-01-01A00:00:00
Tue Dec 31 19:00:00 CST 2013
$ date -d 2014-01-01B00:00:00
Tue Dec 31 20:00:00 CST 2013
$ date -d 2014-01-01C00:00:00
Tue Dec 31 21:00:00 CST 2013
$ date -d 2014-01-01D00:00:00
Tue Dec 31 22:00:00 CST 2013
$ date -d 2014-01-01E00:00:00
Tue Dec 31 23:00:00 CST 2013
$ date -d 2014-01-01F00:00:00
Wed Jan  1 00:00:00 CST 2014
$ date -d 2014-01-01G00:00:00
Wed Jan  1 01:00:00 CST 2014
$ date -d 2014-01-01H00:00:00
Wed Jan  1 02:00:00 CST 2014
$ date -d 2014-01-01I00:00:00
Wed Jan  1 03:00:00 CST 2014
$ date -d 2014-01-01J00:00:00
date: invalid date `2014-01-01J00:00:00'
$ date -d 2014-01-01K00:00:00
Wed Jan  1 04:00:00 CST 2014
$ date -d 2014-01-01L00:00:00
Wed Jan  1 05:00:00 CST 2014
$ date -d 2014-01-01M00:00:00
Wed Jan  1 06:00:00 CST 2014
$ date -d 2014-01-01N00:00:00
Tue Dec 31 17:00:00 CST 2013
$ date -d 2014-01-01O00:00:00
Tue Dec 31 16:00:00 CST 2013
$ date -d 2014-01-01P00:00:00
Tue Dec 31 15:00:00 CST 2013
$ date -d 2014-01-01Q00:00:00
Tue Dec 31 14:00:00 CST 2013
$ date -d 2014-01-01R00:00:00
Tue Dec 31 13:00:00 CST 2013
$ date -d 2014-01-01S00:00:00
Tue Dec 31 12:00:00 CST 2013
$ date -d 2014-01-01T00:00:00
Tue Dec 31 11:00:00 CST 2013
$ date -d 2014-01-01U00:00:00
Tue Dec 31 10:00:00 CST 2013
$ date -d 2014-01-01V00:00:00
Tue Dec 31 09:00:00 CST 2013
$ date -d 2014-01-01W00:00:00
Tue Dec 31 08:00:00 CST 2013
$ date -d 2014-01-01X00:00:00
Tue Dec 31 07:00:00 CST 2013
$ date -d 2014-01-01Y00:00:00
Tue Dec 31 06:00:00 CST 2013
$ date -d 2014-01-01Z00:00:00
Tue Dec 31 18:00:00 CST 2013

2 个答案:

答案 0 :(得分:5)

查看按相关时间排序的字母:

YXWVUTSRQPON Z ABCDEFGHIKLM

我突出显示Z,因为这是(在您的示例中)Wed Jan 1 00:00:00 GMT 2014.AM代表时区西(晚)比GMT,NY时区东(后来)。所以你得到格林威治标准时间,东部12个时区和西部12个时区,这就是25个J.恰好是那个被遗漏的字母,无论出于何种原因。

答案 1 :(得分:4)

GNU date遵循RFC 822或ISO 8601.在RFC 822(已废弃)中,如替代文档RFC 2822中所述,定义了军事时区:

  

1个角色的军事时区是以非标准的方式定义的   在[RFC822]中因此无法预测其含义。该   军事区“A”到“I”的原始定义是   分别相当于“+0100”到“+0900”; “K”,“L”和“M”   分别相当于“+ 1000”,“+ 1100”和“+1200”; “N”   通过“Y”分别相当于“-0100”到“-1200”;   并且“Z”相当于“+0000”。但是,由于错误   [RFC822],它们应该被认为等同于“-0000”,除非   有带外信息证实了它们的含义。

在RFC 822中,这被称为“小时区”。 RFC 822中的注释将其称为“ANSI或军事”。

来自RFC 822

  

军事标准对每个区域使用单个字符。 “Z”   是世界时。 “A”表示提前一小时,“M”表示   提前12小时; “N”是一小时后,“Y”是12小时   后来。字母“J”未使用。

这一切都是有道理的,因为RFC 822可能是在ARPANET和ARPANET出现在DoD圈子的时候编写的。

这是list of military time zones

顺便说一句,当地时间在军队中被特别指定为J区或“朱丽叶”。