我正在使用bash
4.1。我使用一个字母来分隔由date
转换的日期字符串的日期和时间字段。看起来每个字母会导致不同的值(从-5到+18)添加到指定的时间。但请注意J
会导致错误。我无法在man
或info
页面中找到有关此行为的说明。有人可以开导我吗?
$ 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
答案 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区或“朱丽叶”。