Как установить максимальную дату и минимальную дату в диалоговом окне выбора даты

Я хотел бы, чтобы в календаре отображался определенный месяц, и я хотел бы определить диапазон разрешенных дат в календаре.

DateTime today = DateTime.Today;
DatePickerDialog dateDialog = new DatePickerDialog(this, this.OnToDateSet, today.Year, today.Month - 1, today.Day);
dateDialog.DatePicker.MaxDate = DateTime.Today.Millisecond;
dateDialog.DatePicker.MinDate = new DateTime(today.Year, today.Month - 2, today.Day).Millisecond;
dateDialog.Show();  

это то, что я получаю взамен ... он показывает неправильный год и месяц, когда появляется

если я закомментирую maxdate и mindate, тогда календарь откроется в нужный год и месяц

введите здесь описание изображения

Кто-нибудь, пожалуйста, разъясните


person Elstine P    schedule 29.08.2017    source источник


Ответы (1)


это то, что я получаю взамен ... он показывает неправильный год и месяц, когда появляется

если я закомментирую maxdate и mindate, тогда календарь откроется в нужный год и месяц

Если вы отлаживаете свои коды, вы обнаружите, что DateTime.Today.Millisecond и new DateTime(today.Year, today.Month - 2, today.Day).Millisecond возвращают 0. Вот здесь что-то пошло не так. В Xamarin, если вы хотите получить миллисекунду, вам нужно сделать смещение DateTime:

DateTime today = DateTime.Today;
DatePickerDialog dateDialog = new DatePickerDialog(this, this, today.Year, today.Month - 1, today.Day);
//DateTime.MinValue isn't 1970/01/01 so we need to create a min date manually
double maxSeconds = (DateTime.Today - new DateTime(1970, 1, 1)).TotalMilliseconds;
double minSeconds = (new DateTime(today.Year, today.Month - 2, today.Day) - new DateTime(1970, 1, 1)).TotalMilliseconds;
dateDialog.DatePicker.MaxDate = (long)maxSeconds;
dateDialog.DatePicker.MinDate = (long)minSeconds;
dateDialog.Show();
person Elvis Xia - MSFT    schedule 30.08.2017
comment
Спасибо за ответ ! Не могли бы вы объяснить мне... о DateTimeOffiset, пожалуйста? Это сбивает меня с толку - person Elstine P; 30.08.2017
comment
чтобы в календаре отображался текущий месяц ... мне нужно вычесть месяц .. что не так ? см. DatePickerDialog dateDialog = new DatePickerDialog(this, this.OnToDateSet, today.Year, today.Month - 1, today.Day); - person Elstine P; 30.08.2017
comment
сокращение одного месяца, чтобы календарь отображал текущий месяц, не имеет для меня смысла... месяц начинается с 0 или что-то в этом роде - person Elstine P; 30.08.2017