验证日期是不是在 SqlDbType.DateTime 范围内

Posted

技术标签:

【中文标题】验证日期是不是在 SqlDbType.DateTime 范围内【英文标题】:Validating a date to be within the SqlDbType.DateTime range验证日期是否在 SqlDbType.DateTime 范围内 【发布时间】:2011-05-04 03:05:03 【问题描述】:

我想在将 System.DateTime 值作为参数添加到我的 SqlCommand 实例之前验证它。

SqlDbType 枚举的 MSDN 文档说:

日期和时间数据范围从 1753 年 1 月 1 日到 9999 年 12 月 31 日,精度为 3.33 毫秒。

为了验证值,我正在使用

public readonly DateTime SqlDateTimeMin = new DateTime(1753, 1, 1);
public readonly DateTime SqlDateTimeMax = new DateTime(9999, 12, 31);

if (value < SqlDateTimeMin || value > SqlDateTimeMax)
    // Validation check fails
else
    // Validation check succeeds

这是最好的方法吗?有没有替代硬编码这些最小值和最大值的方法?

【问题讨论】:

【参考方案1】:
SqlDateTime.MaxValue = 12/31/9999
SqlDateTime.MinValue = 1/1/1753

然后您的代码将显示为:

if (value < SqlDateTime.MinValue || value > SqlDateTime.MaxValue)

我认为这比 DateTime.MaxValueDateTime.MinValue 更能满足您的需求,因为 DateTime.MinValue 不是 1/1/1753,而是 1/1/0001。

【讨论】:

【参考方案2】:

SqlDateTime.MinValue 和 SqlDateTime.MaxValue 呢?

注意:这些是 SQL 类型 min/max 而不是 .net 类型,如前 2 个答案 :-)

【讨论】:

+1 - 看起来它正是 OP 正在寻找的。​​span> 下午晚些时候眼睛开始坏了。我的错。 为了扩展这一点,如果您需要检查常规的 DateTime(我偶然发现的),请记住 SqlDateTimes 公开了一个 Value 属性,它是一个 DateTime。【参考方案3】:

我认为真正的问题是为什么您的用户输入的日期超出了这个范围?您的验证代码很好,但我建议这是用户可以输入虚假日期的 UI 中的一个更大问题。

【讨论】:

对于我们中的一些人来说,在日期中打错字很容易。或者误解了日期格式(mm/dd/yyyy 或 dd/mm/yyyy)。 给他们一个日期选择器并禁用文本框。这就是我滚动的方式...... :-) 古代人的生日怎么样

以上是关于验证日期是不是在 SqlDbType.DateTime 范围内的主要内容,如果未能解决你的问题,请参考以下文章

验证结束日期是不是大于开始日期

不显眼的验证/jQuery 客户端验证输入的日期是不是超过当前日期

使用Java如何验证所以日期是不是正确

自定义验证规则,检查日期范围是不是已经被占用

我们是不是应该在很大程度上基于本地 jwt 令牌到期日期来验证用户

VBA验证文本框中是不是存在文本,然后检查日期是不是格式正确