我在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);
我做错了什么?
答案 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 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);
构造函数,如下所示:
[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