【问题标题】:Validation of DateTime Format日期时间格式的验证
【发布时间】:2015-06-29 14:58:49
【问题描述】:

我正在尝试验证用户可以提供的日期时间格式。这是示例代码...

 DateTime tempDateTime;
 string _userFormat = "aa";

 string tempDateTime2 = DateTime.Now.ToString(_userFormat);
 bool b = DateTime.TryParseExact(tempDateTime2, _userFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out tempDateTime);

 Console.WriteLine("{0},{1}", tempDateTime, b);
 Console.ReadLine();

这将返回 true(b 的值)和有效的 dateTime (tempDateTime)。我的印象是这将返回 false,因为 _userFormat 不是有效格式。那么有没有其他方法或者我错过了什么。

谢谢

【问题讨论】:

  • 是什么让您认为aa 不是有效的格式字符串?它不传达任何信息,但实际上并不是无效的。您总是可以检查重新解析的值是否与原始值有任何关系......您需要决定需要保留多少信息 - 年/月/日?时间到分钟?到第二个?
  • 如果您在调试器中查看tempDateTime2 的值,您就会明白为什么它会成功。
  • @DStanley:是的 - 我在一分钟前相应地编辑了我的评论:)
  • 请注意,即使是“有效”格式字符串也可能会丢失原始数据/时间中的信息 - 您可以使用仅提取日期、时间、小时、年份等的“有效”字符串。

标签: c# .net visual-studio-2010


【解决方案1】:

由于您使用格式aa 调用ToString(),它不代表有效的自定义格式代码,因此将代码视为字符串文字,您将返回字符串值aa

当您尝试使用相同的格式说明符解析“日期”时,它会看到源字符串的格式与格式说明符匹配,因此它会正确解析它。由于源代码和格式代码均未指定有关数据/时间的任何可行信息,因此使用“默认”值DateTime.Now.Date

来自MSDN

如果 format 定义了一个没有日期元素的时间并且解析操作成功,则生成的 DateTime 值的日期为DateTime.Now.Date

【讨论】:

    猜你喜欢
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 2017-04-04
    • 2014-10-23
    • 2019-04-16
    • 1970-01-01
    相关资源
    最近更新 更多