我正在查看应用程序中的代码(其他人写的),在某些情况下它工作正常,在某些情况下它给出异常,它实际上是在日期时间中转换字符串,这是代码
//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,格式不明确,不清楚且令人困惑!
我的问题是,
- DateTime.Parse 需要什么类型的格式?
- 上面的代码发生了什么?
- 改进代码的建议?
许多人都对您所看到的解析成功的可能原因发表了评论,但您的问题似乎有几个单独的部分......
1. DateTime.Parse 需要什么类型的格式?
DateTime.Parse 已被编写为尽可能具有包容性。几乎任何它能找到某种方式制作成 DateTime 的东西都会尽力做到这一点,这意味着除了通常熟悉的 yyyy-MM-dd 类型格式之外,还有更奇怪的格式,例如 M.yyyy 或 yyyy.M 等等。
2. 上面的代码发生了什么?
这非常复杂,因为DateTime.Parse
方法本身就非常复杂。您可能可以在某处找到源代码,但其复杂性使我很难理解。由于无法提供准确的细节,我将像上面一样回答这个问题。正在发生的情况是,框架正在尽力为您提供日期而不是抛出异常。它给出的日期是对您的意思的最佳猜测。
3. 改进代码的建议?
听起来如果您遇到解析异常,则表明您正在以意外的格式传递日期。如果不知道这些输入是什么,就很难说。不过,有两件事可以改进您的代码。确保使用单一一致的日期格式,然后使用DateTime.ParseExact
以确保它符合正确的格式。通过这种方式,您可以消除所有歧义,但会牺牲灵活性。
第二个选项是使用DateTime.TryParse
。这将尝试解析您的日期,然后返回一个布尔值,说明它是否成功。如果成功,日期解析将在 ref 参数中返回。这不会使您的代码更好地识别未知的日期格式,但会让您的代码知道何时出现这种无法解析的格式,并且您可以处理它(例如,通过提供报告错误格式的用户反馈并建议正确的格式,或者只是通过记录它或其他东西)。
最好的方法主要取决于您的输入来自哪里。如果是用户输入,那么我会选择第二个选项。如果是自动输入,那么您可能需要确保您的输入是标准化的,然后使用第一个选项。当然,情况总是会有所不同,因此这不是一个硬性规定。 :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)