如何使用时区格式化网址datetime参数

时间:2018-10-25 15:50:42

标签: c# datetime timezone utc timezone-offset

我到处搜索,找不到答案。我想了解格式化日期时间(带有时区)URL参数的方式是怎么回事。

这里是情况:

  1. 呼叫者程序的DateTime值为UTC时区。
  2. 接收器Json WebAPI(C#)正在具有中央时区的本地PC上运行。
  3. PoCreationDate是DateTime类型(C#)。我不编写代码来解析PoCreationDate值。 C#自动将其转换为DateTime对象(通过序列化?)。

以下是测试案例:

案例1 : 这个有效

http:// ****** / api / ItemSource / GetItemSourceOption?OrganizationCode = OKC&PoCreationDate = 2018-10-08T01:02:03.0000000-05:00

案例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?)

案例3 : 我目前的解决方法是将其格式化 http:// ****** / api / ItemSource / GetItemSourceOption?OrganizationCode = OKC&PoCreationDate = 2018-10-08T05:00:00 Z

====================

所以我只是想了解这里发生的事情以及这些想法...

我相信使用Z格式是最好的解决方案,因为DateTime值(来自源)始终为UTC格式。

关于-05:00和+00:00,是否应该按照接收者的时区(目标服务器本地时区)设置这些值?因此,对于这种情况,我的PC是接收器(WebAPI),并且将其设置为“中央时区”,因此该值必须为-05:00才能代表“中央时区”的当前值吗?

请帮助我理解这一点。谢谢。

1 个答案:

答案 0 :(得分:1)

根据URL编码规则,偏移量中的+字符被解释为空格。您将需要对其进行编码,以便将其替换为%2B

请注意,这样做还会将:字符替换为%3A,这在querystring参数中是可选的,但仍建议这样做。

通常,查询字符串中传递的参数需要进行编码,除非您可以保证它们不包含特殊字符。

此外,您可能想问自己,该字段是否确实需要完整的日期+时间+偏移量。在许多情况下,可能会像PoCreationDate一样,将"2018-10-08"之类的字段只是一个日期。当然,这取决于您的应用程序逻辑和业务需求。