gpt4 book ai didi

c# - 带有 "+"符号的 DateTime.Parse

转载 作者:太空狗 更新时间:2023-10-30 01:22:29 25 4
gpt4 key购买 nike

我有一段代码可以解析和验证用户输入:

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 标准中的某些内容?

最佳答案

ISO8601中唯一的+是在时间偏移部分,在本例中看起来是这样解析的。但据我所知,在允许时间偏移之前,日期的所有 3 个部分都需要具有有效值。

我建议使用 DateTime.ParseExact(userInput,"yyyy-MM-dd",...(甚至可以使用 InvariantCulture)。

DateTime.Parse 接受各种各样的输入并尝试对用户意图做出最佳猜测。这感觉就像它只是以令人困惑的方式猜测的情况。

示例值(第一个本地 PDT,另外 2 个具有显式时间偏移):

DateTime.Parse("1900-02"   ).ToUniversalTime()    //  2/ 1/1900  8:00:00 AM 
DateTime.Parse("1900-02+00").ToUniversalTime() // 2/ 1/1900 12:00:00 AM
DateTime.Parse("1900-02+03").ToUniversalTime() // 1/31/1900 9:00:00 PM

这似乎 Parse 本质上将 "YYYY-MM+0x" 视为 "YYYY-MM-01T00:00+0x"

关于c# - 带有 "+"符号的 DateTime.Parse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13383349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com