настройка Java.time DatePicker

#java #android-studio #datepicker #java-time

#java #android-studio #datepicker #java-время

Вопрос:

Я переключаю свое приложение на Java.time с использования встроенного григорианского календаря, поскольку мне сказали, что это лучший способ. Есть ли способ выполнить средство выбора даты, как я сделал в приведенном ниже коде с java.time? Если нет, есть ли что-то подобное?

  private void buildDatePicker(){
        final String myFormat = "MMM dd, yyyy"; //sets format in which to show date
        final SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.getDefault());

        Date c = calendar.getTime(); //gets the current date
        String formattedDate = sdf.format(c); //runs date through formatter
        etDate.setText(formattedDate); // sets the etDate edittext to the current date


        final DatePickerDialog.OnDateSetListener datePicker = new DatePickerDialog.OnDateSetListener() {

            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear,
                                  int dayOfMonth) {
              
                calendar.set(Calendar.YEAR, year);
                calendar.set(Calendar.MONTH, monthOfYear);
                calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);



                etDate.setText(sdf.format(calendar.getTime()));
            }

        };

        etDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                new DatePickerDialog(getContext(), datePicker, calendar
                        .get(Calendar.YEAR), calendar.get(Calendar.MONTH),
                        calendar.get(Calendar.DAY_OF_MONTH)).show();
            }
    });
  

Ответ №1:

Ваш код не является ни полным, ни последовательным. И я не занимаюсь Android, поэтому я не знаком с конкретными классами фреймворка. Поэтому я не могу привести полный пример.

Но я могу показать некоторый грубый код, переведенный для использования java.time.

 private void buildDatePicker ( )
{

    // Automatically localize the format of the date string.
    // Perhaps not make `formatter` object `final` as the user's locale might change during runtime.
    DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM ).withLocale( Locale.getDefault() );
    etDate.setText( myLocalDate.format( formatter ) ); // sets the etDate edittext to the current date

    final DatePickerDialog.OnDateSetListener datePicker = new DatePickerDialog.OnDateSetListener()
    {

        @Override
        public void onDateSet ( DatePicker view , int year , int monthOfYear , int dayOfMonth )
        {
            LocalDate localDate = LocalDate.of( year , monthOfYear , dayOfMonth );  // Uses sane numbering for year and month, unlike the `Calendar`/`Date`.
            etDate.setText( myLocalDate.format( formatter ) );
        }
    };

    etDate.setOnClickListener( new View.OnClickListener()

    {
        @Override
        public void onClick ( View v )
        {
            // TODO Auto-generated method stub
            new DatePickerDialog( getContext() , datePicker , myLocalDate.getYear() , myLocalDate.getMonthValue() , myLocalDate.getDayOfMonth() )
                    .show();
        }
    } );
}
  

Намного проще с java.time, чем с ужасными устаревшими классами Calendar , Date , SimpleDateFormat , и тому подобное.

Это уже много раз обсуждалось в Stack Overflow . Выполните поиск, чтобы узнать больше.