不可表示的日期时间

25

我有一个方法,需要两个日期时间参数。

public  void SomeReport(DateTime TimeFrom, DateTime TimeTo)
{
    // ommited 
    TimeFrom.ToString("ddMMyy"), TimeTo.ToString("ddMMyy")));
    // ommited
}
当我发送这些参数时。
 DateTime TimeTo = DateTime.Now;
 DateTime TimeFrom = new DateTime().AddHours(-1);

发生了以下错误:

System.ArgumentOutOfRangeException:添加或减去的值导致DateTime不可表示。

可能的问题是什么?

7个回答

47

new DateTime()01/01/0001 00:00:00,也就是 DateTime.MinValue

你正在从中减去一小时。

我猜你是想从 TimeTo 值中减去一小时:

var TimeFrom = TimeTo.AddHours(-1);

耶!!我也碰到了这个问题。知道了datetime的默认实例提供了datetime的最小值! - UJS

14

new DateTime()返回的是最小可表示的DateTime;将其减去-1个小时得到的DateTime是无法被表示的。

您可能想要使用DateTime TimeFrom = TimeTo.AddHours(-1);


7

尝试:

DateTime TimeTo = DateTime.Now;
DateTime TimeFrom = TimeTo.AddHours(-1);

2

使用 new DateTime() 创建一个 DateTime 对象会给你一个带有 DateTime.MinValue 的对象... 从这个对象中你实际上不能减去任何东西... 否则你会得到你所得到的异常... 参见 MSDN


1
看一下你的日期或时间数据。日期或时间的数字不够。例如,日期必须是8位数20140604,时间必须是6位数,如180203。因此,你会收到错误信息。 我也遇到了这个错误,发现时间是18000,将其更改为180000问题得到解决。

0
在您的情况下,TimeFrom 保存了不能再减去1的日期时间。您可以选择调用
DateTime TimeFrom = TimeTo .AddHours(-1);

或者

DateTime TimeFrom = new DateTime().now.AddHours(-1);

它们两者产生相同的结果。


0
在我的错误中,我使用了时间 24:00 而不是 00:00。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接