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
两次,你应该使用 K
和 DateTime
, 不是 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
。无论如何,这是首选。
我正在使用 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
两次,你应该使用 K
和 DateTime
, 不是 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
。无论如何,这是首选。