#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 . Выполните поиск, чтобы узнать больше.