【问题标题】:setting up a Java.time datePicker设置 Java.time datePicker
【发布时间】:2020-11-14 23:40:46
【问题描述】:

我正在将我的应用程序从使用内置的公历切换到 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();
            }
    });

【问题讨论】:

    标签: java android-studio datepicker java-time


    【解决方案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 比使用糟糕的遗留类 CalendarDateSimpleDateFormat 等要简单得多。

    这已经在 Stack Overflow 上讨论过很多次了。搜索以了解更多信息。

    【讨论】:

      猜你喜欢
      • 2016-08-22
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多