我到处寻找但找不到答案。我想了解格式化日期时间(带时区)url 参数的方式。
情况如下:
- 调用程序具有带有 UTC 时区的 DateTime 值。
- 接收器 Json WebAPI (C#) 正在我的具有中央时区的本地电脑上运行。
- PoCreationDate 是 DateTime 类型 (C#)。我不编写代码来解析 PoCreationDate 值。 C# 自动将其转换为 DateTime 对象(通过序列化?)。
以下是测试用例:
Case 1:
这个有效
http://*****/api/ItemSource/GetItemSourceOption?OrganizationCode=OKC&PoCreationDate=2018-10-08T01:02:03.0000000-05:00
Case 2:
这个不起作用,浏览器正在显示
<Error>
<Message>The request is invalid.</Message>
</Error>
http://*****/api/ItemSource/GetItemSourceOption?OrganizationCode=OKC&PoCreationDate=2018-10-08T05:00:00.0000000+00:00
注意到不同之处了吗?其中一个的值为 -05:00,另一个的值为 +00:00。我的时区是中部(现在是 -05:00?)
Case 3:
我目前的解决方法是以这种方式格式化它
http://*****/api/ItemSource/GetItemSourceOption?OrganizationCode=OKC&PoCreationDate=2018-10-08T05:00:00Z
=====================
所以我只是想了解这里发生了什么以及我的想法......
我相信使用 Z 格式是最好的解决方案,因为 DateTime 值(来自源)始终采用 UTC 格式。
关于-05:00和+00:00,这些是否应该根据接收者的时区(目标服务器本地时区)进行设置?因此,对于这种情况,我的 PC 是接收器 (WebAPI),并且它设置为中央时区,因此该值必须是 -05:00 来表示中央时区的当前值?
请帮助我理解这一点。谢谢。
The +
根据 URL 编码规则,偏移量中的字符被解释为空格。您需要对其进行编码,以便将其替换为%2B
.
请注意,这样做也将替换:
字符与%3A
,它在查询字符串参数中是可选的,但仍然推荐。
一般来说,查询字符串中传递的参数需要进行编码,除非你能保证它们不包含特殊字符。
另外,您可能想问自己该字段是否真的需要是完整的日期+时间+偏移量。在许多情况下,人们可能会期望像这样的字段PoCreationDate
to be just一个日期,如"2018-10-08"
。当然,这取决于您的应用程序逻辑和业务需求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)