具有多个日期时间表示的CultureInfo

时间:2016-12-27 16:02:20

标签: c# .net datetime

假设我们有一个WCF服务,它接受一些DateTime对象并使用它,我们有一个客户端以格式dd/mm/yyyy发送它。但是这个服务也是从JS调用的,它应该发送准确的DateTime,这就是它使用yyyy-MM-ddTHH:mm:ss.fffzzz格式的原因。

是否有可能创建一种文化,它采用两种格式,并且不会像if那样令人厌恶if (DateTime.TryParse(format1, out dt) || DateTime.TryParse(format2, out dt) || DateTime.TryParse(format3, out dt) || ...)

此代码的另一个缺点是我们还必须为DateTimeOffset复制

1 个答案:

答案 0 :(得分:2)

这是ASP.NET MVC处理问题的方式。我认为相同的原则适用于使用其他技术(如WCF)实现的服务。这些约定由Web服务使用。

ASP.NET MVC(包括Web API)对查询字符串中传递的参数执行区分大小写的解析。因此,URL中的日期必须采用通用格式yyyy-mm-dd。表单值(或请求正文中的任何值)应采用服务器指定的格式。这意味着设置为英国文化的服务器将预期日期为英国日期格式:dd-mm-yyyy。

为什么对URL中的项目执行文化不敏感的解析?

对URL中的项目执行不区分大小写的解析有一个非常好,合乎逻辑且方便的原因。想象一下,我看到一个待售商品,并且该商品在网址中有fromto个日期。如果我通过电子邮件将该链接发送给我在德国的朋友(我住在加拿大),我希望他们看到同一页面。如果在URL中的日期执行了对文化敏感的解析,我的朋友可能会被呈现出完全不同的销售,或者可能会出现一个未找到的页面 - 这将不会很好。

所以为了回答你的问题,调用你的WCF服务的客户端应该以服务指定的格式向你的服务提供日期,除非日期在URL中,客户端应该以通用格式提供它yyyy- MM-DD。

另一个选择是客户端为服务提供文化,例如,在SOAP标头中,服务将在解析时使用该文化。