2016-10-30 2 views
0

У меня странное поведение DateTime в C#.Дата месяца месяца 0 неверный формат

Я пытаюсь инициализировать datepicker в январе. Так что я сделать новую дату:

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

Но я получаю это исключение:

System.ArgumentOutOfRangeException: год, месяц и параметры дня описывают не-представимые DateTime.

Если я использую (2017, 1, 15) он работает, но в диалоге времени, инициализируется с:

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

Goes февраля.

Ну я пытался «обмануть» и не сделал:

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

Нет ошибки, но выбор даты идет февраль.

Единственный способ иметь январь:

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

Что я делаю неправильно?

+2

1 января нет 0 ... его не нравится индекс –

+0

не путайте с индексом массива –

ответ

2

вопрос то, как объект обрабатывает DateTime месяц значения (1-12) и, как DatePickerDialog обрабатывает месяц значения (0-11).


DateTime конструктор:

странное поведение DateTime

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

Если мы посмотрим на DateTimeconstructor, это четко указано, что значение месяца должно быть 1 до 12, что недействительно в вашем случае и, следовательно, ex ception.Мы можем исправить это, как показано ниже:

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

DatePickerDialog конструктор:

Exception (или странное поведение) будет возникать, когда мы пытаемся - 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); 
+1

Спасибо большое, все прошло хорошо. – Raikoug

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

Спасибо, очень полезно! – Raikoug

Смежные вопросы