【发布时间】:2015-12-23 09:12:42
【问题描述】:
我在使用C# 的Windows 应用商店应用程序中有以下code:
birthDateTimePicker.Date = DateTime.Now;
if (birthDateTimePicker.Date == DateTime.MinValue)
{
no_date_lable.Visibility = Visibility.Collapsed;
birthDateTimePicker.Visibility = Visibility.Collapsed;
}
注意:这一行birthDateTimePicker.Date = DateTime.Now; 是例如真正的用户将选择或者它将来自服务器。
但我在这一行得到了一个例外:
如果(dt_born_dt == DateTime.MinValue)
抛出异常的原因是什么:
应用偏移时表示的 UTC 时间必须介于 0 年和 10,000 年。
真的,我在三台计算机上测试过,其中一台出现错误!!!
我将系统的时区更改为 (UTC-08:00) 太平洋时间(美国和加拿大),但根本没有出现此异常,并且代码正常工作!
我的问题实际上是为什么在其时区为 (UTC+03:30) 德黑兰的系统中发生此异常!
对不起我的英语不好
【问题讨论】:
-
不,我以前看过这个,但我不使用 DateTimeOffset
-
我没有得到任何异常完全。您确定您发布了正确的代码示例吗?
-
是的,我只是在我的代码中从服务器获取了这个“1985-01-23”,它在这个变量“patient_date_of_birth”中,我在另一台计算机上尝试了这个代码,确实工作正常!!!跨度>
-
dt_born_dt不是一个简单的DateTime变量。它是一些 GUI 控件。它有一个属性Visibility。 -
不可重现。阅读How to Ask 并创建一个minimal reproducible example。正如@Jeppe 所指出的,
dt_born_dt不是System.DateTime类型。在内部,控件将使用DateTimeOffset,您传递的日期将从DateTimeKind.Unspecified转换为DateTimeKind.UTC,它将变为DateTime.MinValue(假设您处于GMT+ 时区)。修复可能是dt_born_dt = DateTime.MinValue.SpecifyKind(DateTimeKind.UTC)。