我code
在Windows Store应用程序中使用以下命令C#
:
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
)德黑兰时发生此异常!
对不起,我英语不好
因此,您可以进行控制dt_born_dt
(请使用有意义的名称,例如birthDateTimePicker
,并考虑生日不需要时间,并且最肯定地不能是1年级[目前没有活到2015年的年龄的人],也许使用可以为null的类型)具有Date
类型为的属性,该属性DateTimeOffset
从+3:30
调试器显示的值中可见。
现在,此类型具有的隐式转换DateTime
,因此,如果执行以下操作:
birthDatePicker.Date = DateTime.MinValue;
它将DateTime.MinValue
具有DateTimeKind.Unspecified
类型的转换为UTC。这将引发显示的异常,因为您处于GMT +时区:它将从中减去GMT偏移量MinValue
,从而产生无效值,如将DateTime.MinValue转换为DateTimeOffset所述。
解决方法:使用DateTimeOffset.MinValue
。
另外,请勿try-catch
在周围使用Parse(Exact)
; 使用TryParse(Exact)
。