日期时间月0格式无效
本文关键字:格式 无效 时间 日期 | 更新日期: 2023-09-27 18:15:30
我在c#中发现了奇怪的DateTime行为
我试图在一月份初始化一个日期选择器。所以我创建了一个新的日期:
DateTime MyDate = new DateTime(2017, 0, 15);
但是我得到了这个异常:
系统。ArgumentOutOfRangeException:年、月、日参数描述了一个不可表示的日期时间。
如果我使用(2017, 1, 15)
,它工作,但时间对话框,初始化为:
DatePickerDialog dialog = new DatePickerDialog(
Activity,
this,
MyDate.Year,
MyDate.Month,
MyDate.Day);
2月上映。
我试着"作弊",结果做到了:
DateTime MyDate = new DateTime(2017, 1, 15);
DateTime = DateTime.AddMonths(-1);
没有错误,但是日期选择器在二月。
拥有一月的唯一方法是:
DateTime MyDate = new DateTime(2017, 12, 15);
我做错了什么?
DateTime.Month
是一个介于1到12之间的值,这与大多数人认为的月'数'是一致的。
根据android文档,你正在调用的DatePickerDialog
构造函数接受从零开始的月份。它接受0-11范围内的值,因此您需要从DateTime.Month
中减去1。
DatePickerDialog dialog = new DatePickerDialog(Activity,
this, MyDate.Year, MyDate.Month - 1, MyDate.Day);
问题是DateTime
对象如何处理月份值(1-12)和DatePickerDialog
如何处理月份值(0-11)。
DateTime
constructor:
DateTime的奇怪行为
DateTime MyDate = new DateTime(2017, 0, 15);
如果我们看一下DateTime
构造函数,它清楚地说明了月份的值应该是1到12,这在您的情况下是无效的,因此出现了异常。我们可以修改如下:
DateTime MyDate = new DateTime(2017, 1, 15);
DatePickerDialog
constructor:
new DatePickerDialog
和DateTime
的月份值结合使用时,会出现异常(或奇怪的行为),因为DatePickerDialog
的构造函数期望从0-11得到月份值。 int: the initially selected month (0-11 for compatibility with MONTH)
然后可以遵循的方法是将正确的index
每月提供给DatePickerDialog
构造函数,如下所示:
DateTime MyDate = new DateTime(2017, 1, 15);
DatePickerDialog dialog = new DatePickerDialog(Activity,
this,
MyDate.Year,
MyDate.Month - 1,
MyDate.Day);