【发布时间】:2018-02-06 20:54:39
【问题描述】:
我从用户那里获得了几个参数,在一些样板代码之后我获得了一个这样的 URL:
http://localhost:58756/api/Shippers/GetShippers?page=1&date=1/1/01%2012:00:00%20AM&parx=y&and more parameters...
date=1/1/01%2012:00:00%20AM 部分是这样获得的:
DateTime date=default(DateTime);
这给出了1/1/01 12:00:00 AM,即Jan 1st of year 0001
我发送请求并且方法在 WebAPI 服务中被命中,但日期值被解析为:1/1/01 2001
我知道我可以使用Nullable DateTime 或将参数作为格式化日期ToString("mm/dd/yyyy") 等发送。
但是,如果我无法控制客户端发送的内容并且我保留了 DateTime 参数怎么办?我将如何区分服务器中的 2001 年 1 月 1 日和 0001 年 1 月 1 日?
【问题讨论】:
-
如果您无法控制发送和接收的内容是
1/1/01 12:00:00 AM,那么忘记您将如何在代码中执行它 - 您怎么知道这意味着0001而不是2001?一旦您可以确定您使用什么逻辑来确定正确的年份,那么您应该能够将其放入代码中。或者,如果不是,您可以告诉我们您使用的逻辑,我们可以帮助您将其放入代码中。 应该可能发生的是,如果您收到的是两位数的年份,那么应该说明这意味着什么(例如,它是 2000-2099 范围内或 1970-2069 范围内的日期。 ..). -
我肯定分不清。你可能有更多信息。如果不是因为我刚刚编辑到之前的评论中,发件人应该能够告诉您日期的含义。如果他们发送的日期不明确(例如,因为 0001 和 2001 都是有效的),那么这是他们最后需要解决的错误。
-
也许我的问题是:有没有办法告诉 WebAPI:“不要使用 2000 年的符号进行解析”?
-
不要使用
DateTime;只需使用string并根据需要手动解析它。 -
@MikeMcCaughan 是的,我知道,我有这个选项等等......
标签: c# date datetime asp.net-web-api datetime-format