Rest API 的日期问题

date issue with Rest API

我正在使用 Jira Rest API。问题是当我发出 POST 请求时出现错误:

The remote server returned an error: (500) Internal Server Error

经过调查,我了解到问题出在日期格式上。当我使用下面显示的确切日期时,我的请求就有效了。

2016-11-09T05:28:58.211+0000

谁能帮我确定这种格式到底是什么 -- 它看起来类似于 ISO 8601。我尝试了下面的代码,但它不起作用:

DateTime.Now.ToString("yyyy-MM-ddThh:mm:ss.fffzfff")
Output: 2016-11-29T01:37:34.453+2453

您只是格式设置不正确。

DateTime.Now.ToString("yyyy-MM-ddThh:mm:ss.fffK")
// "2016-11-28T23:50:06.657+00:00"

注意小时数必须是 HH,而不是 hh,你不应该使用 fff 两次,你应该使用 KDateTime , 不是 z.

理想情况下,ISO8601 扩展格式应该在偏移量中有一个冒号,+00:00 而不是 +0000。它仍然是没有冒号的有效 ISO8601,但你可能不应该省略它,除非你的目标是 ISO8601 compact 格式,这也会从整个字符串中删除所有破折号和冒号.

如果你真的无法处理偏移量中的冒号,并希望其余部分使用扩展格式,则必须手动删除一个冒号。

var s = DateTime.Now.ToString("yyyy-MM-ddThh:mm:ss.fffK");
s = s.Substring(0, 26) + s.Substring(27,2);
// "2016-11-28T23:50:06.657+0000"

至于为什么你应该使用 K 而不是像 zzz 这样的东西 - 这归结为 DateTime 有一个 Kind 属性 , 而 DateTimeOffset 有一个偏移量。关于此的更多信息 here and here.

此外,请记住您可能不想在 REST API 中使用 DateTime.Now。 API 可能是 服务器 上的 运行,并且服务器的本地时区应该与您的应用程序、您的 API 几乎无关,它是外部消费者。相反,您可能只想使用 DateTime.UtcNow,当您使用 K 说明符时,您的输出将给出 Z 而不是 +00:00。无论如何,这是首选。