验证日期是不是在 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.MaxValue
和 DateTime.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 客户端验证输入的日期是不是超过当前日期