Средство выбора даты для Android до 1900 года

#android #calendar #gregorian-calendar

#Android #Календарь #григорианский-календарь

Вопрос:

Может ли средство выбора даты календаря вернуться дальше 1900 года или даже дальше 1582 года (день введения григорианского календаря)?

Если можно, можете ли вы показать мне какую-нибудь документацию, где я могу воспроизвести ее дальше?

Комментарии:

1. Я думаю, вам нужно будет создать собственный пользовательский DatePicker / CalendarView, поскольку обработка времени до эпохи отсутствует в стандартной Java. Хорошо то, что исходный код для этих виджетов / представлений доступен в проекте Android с открытым исходным кодом.

Ответ №1:

На самом деле это было довольно просто. В XML вы можете установить минимальную и максимальную дату.

Комментарии:

1. Как насчет добавления некоторого кода, чтобы показать, как кто-то может это сделать? Спасибо!

Ответ №2:

Предложенное решение не сработало для меня. Я использовал следующий код:

     void initDatePicker()
    {
        Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
        calendar.set(1, 0, 1);
        datePicker.setMinDate(calendar.getTimeInMillis());
        calendar.set(3000, 0, 1);
        datePicker.setMaxDate(calendar.getTimeInMillis());
    }
  

Ответ №3:

Для меня я использую этот код :

 public void onClick(View v) {
DatePickerDialog picker;
final Calendar cldr = Calendar.getInstance();
int day = cldr.get(Calendar.DAY_OF_MONTH);
int month = cldr.get(Calendar.MONTH);
int year = cldr.get(Calendar.YEAR);
picker = new DatePickerDialog(MainActivity.this,
    new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        //-- Do your stuff with the date picked : dayOfMonth "/" (monthOfYear   1) "/" year
        }
    }, year, month, day);
//-- Set the calendar to the year one to year 3000 !
Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
calendar.set(1, 0, 1);
picker.getDatePicker().setMinDate(calendar.getTimeInMillis());
calendar.set(3000, 0, 1);
picker.getDatePicker().setMaxDate(calendar.getTimeInMillis());
///////////////////
picker.show();
  

}