【发布时间】:2012-11-14 16:50:48
【问题描述】:
我有一段代码可以解析和验证用户输入:
DateTime myDateTime = DateTime.Parse(userInput,currentCulture);
正在设置当前文化(为 en-ca 或 fr-ca),并且用户输入始终采用 ISO 8601 格式“yyyy-MM-dd”。
如果用户输入 1900-01-01,则按预期创建日期。 如果输入是“1900-01+01”,则创建的日期时间是 1899-12-31 6:00:00 PM 没有抛出异常,DateTime.Parse 很乐意将其转换为错误的日期.
为了完成这项工作,我使用了DateTime.ParseExact(userInput,"yyyy-MM-dd",currentCulture)。
所以我的问题不是如何使这项工作(我有),而是 +01 或任何 + 值是怎么回事?我是否遗漏了 ISO 标准中的某些内容?
【问题讨论】:
-
你希望 '1900-01+01' 解析成什么?你是说这是一个有效的日期?
-
可以在解析日期时间前将
+替换为-。 -
最好进行一些客户端和服务器端验证以验证您的日期是否为“yyyy-MM-dd”格式,否则会显示错误。
-
不,我并不是说这是一个有效的日期,恰恰相反。它不应该解析,但它正在解析为一个日期。
-
啊,在这种情况下,您需要在通过任何解析算法之前验证您的用户输入。