我想知道是否有任何简洁的方法来检查数据是否在允许的范围内。我的意思是在c#中我们可以表示从0001-01-01到(我认为)9999-01-01的数据。但是,如果我们尝试做那样的事情
DateTime result = DateTime.Parse("0001-01-01").Subtract(TimeSpan.FromDays(1))
我得到一个例外。有没有任何简洁的方法来检查是否可以进行DateTime操作(加法减法等)
答案 0 :(得分:3)
只需使用comparison operators (>, <, >=, <=, == and !=),因为它们是在DateTime中实现的。
示例:
DateTime lowerAllowedDate = new DateTime(1,1,1); // 01/01/0001
DateTime upperAllowedDate = new DateTime(3000, 12, 31) // 31/12/3000
DateTime now = DateTime.Now
if (lowerAllowedDate <= now && now < upperAllowedDate)
{
//Do something with the date at is in within range
}
答案 1 :(得分:2)
考虑这些扩展方法。
public static class ValidatedDateTimeOperations
{
public static bool TrySubtract (this DateTime dateTime, TimeSpan span, out DateTime result)
{
if (span < TimeSpan.Zero)
return TryAdd (dateTime, -span, out result);
if (dateTime.Ticks >= span.Ticks)
{
result = dateTime - span;
return true;
}
result = DateTime.MinValue;
return false;
}
public static bool TryAdd (this DateTime dateTime, TimeSpan span, out DateTime result)
{
if (span < TimeSpan.Zero)
return TrySubtract (dateTime, -span, out result);
if (DateTime.MaxValue.Ticks - span.Ticks >= dateTime.Ticks)
{
result = dateTime + span;
return true;
}
result = DateTime.MaxValue;
return false;
}
}
可以像这样调用:
DateTime result;
if (DateTime.MinValue.TrySubtract (TimeSpan.FromDays(1), out result)
{
// Subtraction succeeded.
}
答案 2 :(得分:1)
预先检查给定操作中的溢出是很麻烦的,我不确定这对于简单地处理exception
是否真的值得。
例如,您可以在减去以下时执行以下操作:
DateTime date;
TimeSpan subtractSpan;
if ((date - DateTime.MinValue) < subtractSpan)
{
//out of range exception: date - subtractSpan
}
值得吗?你的电话。
答案 3 :(得分:0)
查看MSDN中的DateTime结构文档。
特别是,你可以看看:
您还可以将try..catch(ArgumentOutOfRangeException)放在您尝试使用的DateTime值周围。
但是,如果你一直(或曾经)遇到这种异常,我会仔细研究你的设计。除非你正在进行一些严肃的日期处理,否则我不知道我会遇到最小值和最大值的任何情况。