【问题标题】:Month name is appearing with M+number in datePicker dialog in android月份名称在 android 的 datePicker 对话框中显示为 M+number
【发布时间】:2017-02-07 20:31:21
【问题描述】:

我正在尝试以Sep|29|2016 之类的格式在datePicker 对话框中显示日期。如下图所示。

预期输出

不幸的是,大多数时候我得到28|M09|2016 很少我得到预期的输出。你可以在下面的图片中看到

电流输出

我尝试了以下代码

public Dialog onCreateDialog(Bundle savedInstanceState) {
    Calendar calendar = Calendar.getInstance();

    System.out.println(calendar.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.US));    

    calendar.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.US);
    int yy = calendar.get(Calendar.YEAR);
    int mm = calendar.get(Calendar.MONTH);   
    int dd = calendar.get(Calendar.DAY_OF_MONTH);      

    System.out.println("yearr==="+yy);
    System.out.println("monthh==="+mm);
    System.out.println("dayy==="+dd);



    DatePickerDialog datepickerdialog = new DatePickerDialog(getActivity(),
             this,yy,mm,dd);
    return datepickerdialog;
}

感谢期待。

【问题讨论】:

  • prolly 因为语言环境
  • @Selvin,你能详细解释一下吗?因为我是 android 新手。
  • 调用 Locale.ENGLISH 而不是 Locale.US 。希望这会有所帮助
  • Locale.getDefault()
  • 大多数时候你得到意想不到的答案而很少得到预期是什么意思?你什么时候做错了,什么时候做对了?

标签: android android-datepicker datepickerdialog


【解决方案1】:

你期待吗?

    Button selectDate = (Button) findViewById(R.id.idButton);
    selectDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Calendar currentDate = Calendar.getInstance(Locale.ENGLISH);
            int mYear = currentDate.get(Calendar.YEAR);
            int mMonth = currentDate.get(Calendar.MONTH);
            int mDay = currentDate.get(Calendar.DAY_OF_MONTH);

            DatePickerDialog mDatePicker = new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
                public void onDateSet(DatePicker view, int selectedyear, int selectedmonth, int selectedday) {

                    GregorianCalendar gc = new GregorianCalendar();
                    gc.setFirstDayOfWeek(Calendar.MONDAY);
                    gc.set(Calendar.MONTH, view.getMonth());
                    gc.set(Calendar.DAY_OF_MONTH, view.getDayOfMonth());
                    gc.set(Calendar.YEAR, view.getYear());

                    DecimalFormat mFormat = new DecimalFormat("00");
                    String selectedDate = String.format("%s/%S/%s", gc.get(Calendar.YEAR),
                            mFormat.format(gc.get(Calendar.MONTH) + 1),
                            mFormat.format(gc.get(Calendar.DATE)));

                }
            }, mYear, mMonth, mDay);
            mDatePicker.setTitle("Select Date");
            mDatePicker.show();
        }
    });  

【讨论】:

  • 一个包含 DatePicker 的简单对话框。让我知道您的反馈。
【解决方案2】:
Calendar myCalendar = Calendar.getInstance();

DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {
        // TODO Auto-generated method stub
        myCalendar.set(Calendar.YEAR, year);
        myCalendar.set(Calendar.MONTH, monthOfYear);
        myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        updateLabel();
    }

};

   edittext.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            new DatePickerDialog(classname.this, date, myCalendar
                    .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                    myCalendar.get(Calendar.DAY_OF_MONTH)).show();
        }
    });

      private void updateLabel() {

    String myFormat = "MM/dd/yy"; //In which you need put here
    SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);

    edittext.setText(sdf.format(myCalendar.getTime()));
    }

【讨论】:

    【解决方案3】:

    可能是Locale引起的问题。

    dialog 之前设置当前locale。去掉Locale.US这就是问题所在。

    Locale locale = getResources().getConfiguration().locale;
    Locale.setDefault(locale);
    

    将此locale 设置为dialog 后。

    然后把你的dialog 的东西放上去。

    Android N(Api 级别 24)更新(无警告):

    @TargetApi(Build.VERSION_CODES.N)
    public Locale getCurrentLocale(){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
            return getResources().getConfiguration().getLocales().get(0);
        } else{
            //noinspection deprecation
            return getResources().getConfiguration().locale;
        }
    }
    

    【讨论】:

    • 我已经尝试过这种方法。它不起作用。 @jaydroider 如果可能,请建议任何自定义日期选择器。
    • @Sujay 请显示您使用此方法尝试过的全部代码。
    【解决方案4】:

    您是否更改了区域设置? 当您更新语言环境配置时,似乎 datepickerdialog 使用该格式作为默认(英语)语言环境。

    不是这个

    Locale locale = new Locale(countryCode);
    Locale.setDefault(locale);
    

    对使用“en”语言的国家/地区执行此操作

    Locale locale = new Locale(language, countryCode);
    Locale.setDefault(locale);
    

    样本

    Locale locale = new Locale("en", "GB");
    

    【讨论】:

    • Locale.setDefault(new Locale("en", "GB"));这对我有用,谢谢
    【解决方案5】:

    可能是您正在使用的平板电脑上的操作系统版本。这不是语言环境,因为您使用它来获取字符串,而不是获取日历实例。使用 AppCompatDialogFragment (import android.support.v7.app.AppCompatDialogFragment)

    public class DatePickerFragment extends AppCompatDialogFragment
            implements DatePickerDialog.OnDateSetListener {
    
        private static final String TAG = "DatePickerFormat";
    
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            final Calendar c = Calendar.getInstance();
    
            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH);
            int day = c.get(Calendar.DAY_OF_MONTH);
    
            return new DatePickerDialog(getActivity(), this, year, month, day);
        }
    
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            Log.d(TAG, String.format("onDateSet: %d %d %d", year, month, dayOfMonth));
        }
    }
    

    【讨论】:

    • 您好,在单独的项目中测试了您的代码,但它不起作用
    【解决方案6】:

    只需在 Calendar.getInstance 中传递“Locale.getDefault()”。下图示例

    public void getDate(EditText editText) {
        Calendar c = Calendar.getInstance(Locale.getDefault());
        int mYear = c.get(Calendar.YEAR);
        int mMonth = c.get(Calendar.MONTH);
        int mDay = c.get(Calendar.DAY_OF_MONTH);
        // date picker dialog
        datePickerDialog = new DatePickerDialog(CustomerProfileActivity.this,
                new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year,
                                          int monthOfYear, int dayOfMonth) {
                        selectedDate = year + "-" + (monthOfYear + 1) + "-" + dayOfMonth;
    
                        editText.setText(selectedDate);
    
                    }
                }, mYear, mMonth, mDay);
        datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis() - 1000);
        datePickerDialog.setTitle("Select Date");
        datePickerDialog.show();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-01
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多