gpt4 book ai didi

c# - DateTime.Parse 可以格式化不寻常的格式字符串吗?

转载 作者:太空狗 更新时间:2023-10-29 23:15:15 24 4
gpt4 key购买 nike

我正在查看应用程序中的代码(其他人编写的),在某些情况下它运行良好,在某些情况下它给出异常,它实际上是在日期时间中转换字符串,这是代码

//5000 is the year,but what about "1" is it month or day ?,if its month
//then what about the day ?
DateTime time = DateTime.Parse("1.5000");//1.5000 doesn't looks a date to me ?
time.ToString();//returns "1/1/5000 12:00:00 AM"

//where as if I give this string to DateTime.Parse();
time = DateTime.Parse("2341.70");
//FormatException was unhandled
//String was not recognized as a valid DateTime.

一个令人困惑的想法
这个字符串“3.5000”(它匹配 1.5000 模式)是如何计算的,这意味着 3-3-5000 还是 1-3-5000,格式不明确且令人困惑!

我的问题是,

  1. DateTime.Parse 需要什么样的格式?
  2. 上面的代码发生了什么?
  3. 改进代码的建议?

最佳答案

许多人评论了您所看到的解析成功的可能原因,但您的问题似乎有几个独立的部分...

<强>1。 DateTime.Parse 期望什么样的格式?

DateTime.Parse 已被编写为尽可能具有包容性。几乎任何它可以找到某种方式制作成 DateTime 的东西,它都会尽最大努力这样做,这意味着除了通常熟悉的 yyyy-MM-dd 类型格式之外,还有更多奇怪的格式,如 M.yyyy 或 yyyy.M 等等.

<强>2。上面的代码发生了什么?

这非常复杂,因为 DateTime.Parse 方法本身非常复杂。您可能可以在某处找到源代码,但它的复杂性让我很难理解。在无法提供准确细节的情况下,我将像上面一样回答这个问题。正在发生的事情是框架正在尽最大努力给你一个日期而不是抛出异常。它给出的日期是对您的意思的最佳猜测。

<强>3。改进代码的建议?

听起来,如果您遇到解析异常,说明您正在以非预期的格式传递日期。不知道这些输入是什么很难说。不过有两件事可以改进您的代码。确保使用单一一致的日期格式,然后使用 DateTime.ParseExact 确保它符合正确的格式。您将通过这种方式消除所有歧义,但会牺牲灵 active 。

第二个选项是使用 DateTime.TryParse。这将尝试解析您的日期,然后返回一个 bool 值,说明它是否成功。如果成功,日期解析将在 ref 参数中返回。这不会使您的代码更好地识别未知的日期格式,但会让您的代码知道何时出现这种无法解析的格式并且您可以处理它(例如,通过提供报告错误格式的用户反馈并建议正确的格式,或者只需记录它或其他东西)。

最好的方法主要取决于您输入的来源。如果是用户输入,那么我会选择第二个选项。如果它是自动输入,那么您可能希望确保您的输入是标准化的,然后使用第一个选项。当然,情况总是不同的,所以这不是一个硬性规定。 :)

关于c# - DateTime.Parse 可以格式化不寻常的格式字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20560377/

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