DateTime month 0格式无效

时间:2016-10-30 13:42:48

标签: c# android visual-studio datetime

我在c#中遇到了DateTime的奇怪行为。

我正试图在1月初始化一个日期选择器。所以我开了个新日期:

DateTime MyDate = new DateTime(2017, 0, 15);

但我得到了这个例外:

  

System.ArgumentOutOfRangeException:Year,Month和Day参数描述了一个无法表示的DateTime。

如果我使用(2017, 1, 15)它可以工作,但时间对话框初始化为:

DatePickerDialog dialog = new DatePickerDialog(
    Activity,
    this,
    MyDate.Year,
    MyDate.Month,
    MyDate.Day);

二月份。

我试图“欺骗”并做了:

DateTime MyDate = new DateTime(2017, 1, 15);
DateTime = DateTime.AddMonths(-1);

没有错误,但是日期选择器会在二月份进行。

拥有1月的唯一方法是:

DateTime MyDate = new DateTime(2017, 12, 15);

我做错了什么?

2 个答案:

答案 0 :(得分:7)

DateTime.Month是一个介于1到12之间的值,与大多数人一个月的想法一致'数字'是

根据android docs,您呼叫的DatePickerDialog构造函数接受从零开始的月份。它接受0-11范围内的值,因此您需要从DateTime.Month中减去一个。

DatePickerDialog dialog = new DatePickerDialog(Activity,
    this, MyDate.Year, MyDate.Month - 1, MyDate.Day);

答案 1 :(得分:2)

问题DateTime对象处理月份值(1-12)以及DatePickerDialog如何处理月份值(0-11)的方式。

DateTime构造函数:

  

DateTime的奇怪行为

DateTime MyDate = new DateTime(2017, 0, 15);

如果我们查看DateTime constructor,则明确指出月份值应为 1到12 ,这在您的情况下无效且因此例外。我们可以更正如下:

DateTime MyDate = new DateTime(2017, 1, 15);

DatePickerDialog构造函数:

当我们尝试将new DatePickerDialogDateTime的月份值结合使用时会出现异常(或奇怪行为),因为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); 构造函数,如下所示:

[mysqld]
default-storage-engine = innodb
innodb_buffer_pool_size = 2147483648
innodb_buffer_pool_instances = 4 
innodb_buffer_pool_chunk_size = 1073741824 
innodb_change_buffer_max_size=30