日期时间月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);

我做错了什么?

日期时间月0格式无效

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 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);