UTC日期字符串是否需要包含格式说明符“Z”,即使该字符串包含时间偏移量?

23

例如,

const d = new Date("2012-08-20T15:00:00-07:00");

d 是带有时区偏移量为 07:00UTC 时间。它是否仍需要像这样的 Z2012-08-20T15:00:00-07:00Z?这样正确吗?

如果我使用 JavaScript 中的 Date.parse() 方法解析带有 Z 的字符串,它会抛出错误。不确定哪里出了问题!

2个回答

31

不应该在时间偏移量中包含"Z"。

来自rfc3339

  Z           A suffix which, when applied to a time, denotes a UTC
              offset of 00:00; often spoken "Zulu" from the ICAO
              phonetic alphabet representation of the letter "Z".

"Z"代表零时区偏移量,因此将其与显式偏移量(尤其是非零偏移量)一起使用没有任何意义。


有没有 JavaScript 函数可以找出日期字符串是否添加了这个偏移量?还是我只需要使用正则表达式? - Cute_Ninja
抱歉,我不知道JavaScript是否有比使用正则表达式更简单的方法来检查这个问题。 - Laurence Gonsalves

14

引用 W3C有关日期和时间格式的注释:

YYYY-MM-DDThh:mm:ss.sTZD (例如1997-07-16T19:20:30.45+01:00)

其中:

[...]

TZD  = time zone designator (Z or +hh:mm or -hh:mm)
请注意上面的 or 单词。您要么指定时区偏移量,要么使用 Z 表示 Zulu(无偏移量)。

Z实际上代表零。Zulu一词只是北约语音中表示“Z”的方式,而不是反过来。 - Ted Bigham
3
@TedBigham说的不正确,Z并不代表零。每个时区偏移量都被分配了一个字母:https://en.wikipedia.org/wiki/List_of_military_time_zones - smcs
@speedymcs 的意思是 Z 不代表 Zulu。它只是表示 00:00 时区的 'Z'。是的,因为有 'Z' 所以也被称为 Zulu,但不是反过来。如果由于某种疯狂的原因,'Z' 时区被命名为 Pumpkin,这里仍然是 'Z',而不是 'P'。我想“代表”不是正确的术语。 - Ted Bigham
1
@TedBigham 你说Z代表零,我的观点是要纠正这一点。我同意其他的观点! - smcs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接