【问题标题】:Handle with zero's in DatePicker 6-8-2014 to 06-08-2014 in Android?在 Android 中处理 DatePicker 6-8-2014 到 06-08-2014 中的零?
【发布时间】:2014-08-06 08:35:54
【问题描述】:

在我的简单 android 应用中显示当前日期 05-08-2014。 使用此代码

SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
String currentDate = sdf.format(new Date());
datepick.setText(currentDate);

当用户想要更改日期时,我将 DatePicker 用于该文本视图(datepick)。使用此代码

//To show current date in the datepicker
Calendar mcurrentDate=Calendar.getInstance();
int mYear = mcurrentDate.get(Calendar.YEAR);
int mMonth = mcurrentDate.get(Calendar.MONTH);
int mDay = mcurrentDate.get(Calendar.DAY_OF_MONTH);

DatePickerDialog dpdialog=new DatePickerDialog(QAOD_Tab_1.this, new OnDateSetListener(){
@Override
public void onDateSet(DatePicker view, int selectedyear, int selectedmonth, int selectedday) {
datepick.setText(new StringBuilder()
.append(selectedday).append("-").append(selectedmonth + 1).append("-")
.append(selectedyear).append(" ")); 

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

现在得到这样的日期 5-8-2014。 我还需要在日期和月份之前显示零。如何以这种格式显示零。我需要这样的结果 05-08-2014.

【问题讨论】:

  • 但这是基本问题(前导零)......它曾经被用来学习任何编程语言的programmint...... 1)您可以自己编写代码(if month < 10 then add leading zero 同样适用于日)... 2)您可以了解字符串格式... 3)您还可以从选定的年/月/日创建日期/日历对象并使用 SDF 进行格式化
  • 感谢您的回答。我是安卓新手。所以我没有面对零的问题。谢谢你的建议。

标签: android datepicker


【解决方案1】:

SimpleDateFormat 导致 API 24 中的 DatePicker 对话框出现问题

所以我解决了

public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

        // do some stuff for example write on log and update TextField on activity
        int month= monthOfYear+1;
        String fm=""+month;
        String fd=""+dayOfMonth;
        if(month<10){
            fm ="0"+month;
        }
        if (dayOfMonth<10){
            fd="0"+dayOfMonth;
        }
        String date= ""+year+"-"+fm+"-"+fd;
        Log.d("tag",""+date);

【讨论】:

    【解决方案2】:

    在日期设置中,如果您使用 api 级别 12 及以上,则可以使用以下代码

        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
        String selectedDate = sdf.format(view.getCalendarView().getDate());
    

    您的 api 级别为

    【讨论】:

    • 感谢您的回答,上面我的代码运行良好@Manivannan。在那个日期选择器中,我使用了一个代码,因为它在日期和月份中留下了零。我需要证明这一点。
    • 使用这个 datepick.setText(new StringBuilder() .append(selectedday>9?selectedday:("0"+selectedday)).append("-").append(selectedmonth>8 ?( selectedmonth+1):("0"+(selectedmonth+1))).append("-") .append(selectedyear).append(" "));
    • datepick.setText(sdf.format(new Date(selectedyear - 1900, selectedmonth, selectedday)))
    • getCalendarView() 和 getCalendarViewShown() 方法已在 API 级别 24 中弃用。
    【解决方案3】:
    editText.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(final View v) {
                final Calendar c = Calendar.getInstance();
                mYear = c.get(Calendar.YEAR);
                mMonth = c.get(Calendar.MONTH);
                mDay = c.get(Calendar.DAY_OF_MONTH);
    
                final DatePickerDialog datePickerDialog = new DatePickerDialog(getContext(),
                        new DatePickerDialog.OnDateSetListener() {
                            String fmonth, fDate;
                            int month;
    
                            @Override
                            public void onDateSet(DatePicker view, int year,
                                                  int monthOfYear, int dayOfMonth) {
    
                                try {
                                    if (monthOfYear < 10 && dayOfMonth < 10) {
    
                                        fmonth = "0" + monthOfYear;
                                        month = Integer.parseInt(fmonth) + 1;
                                        fDate = "0" + dayOfMonth;
                                        String paddedMonth = String.format("%02d", month);
                                        editText.setText(fDate + "/" + paddedMonth + "/" + year);
    
                                    } else {
    
                                        fmonth = "0" + monthOfYear;
                                        month = Integer.parseInt(fmonth) + 1;
                                        String paddedMonth = String.format("%02d", month);
                                        editText.setText(dayOfMonth + "/" + paddedMonth + "/" + year);
                                    }
    
                                } catch (Exception e) {
                                    e.printStackTrace();
                                }
    
                            }
    
                        }, mYear, mMonth, mDay);
                datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());
                datePickerDialog.show();
    
            }
    
        });
    

    【讨论】:

    • Edittext 将可编辑的 false 和焦点放在 XML 中。这个逻辑工作正常。
    【解决方案4】:

    你可以试试这个:

        public void onDateSet(DatePicker view, int myear, int mmonth, int mdayOfMonth) {
    
                String nd = "" + mdayOfMonth;
                String nm = "" + mmonth ;
                if ( mdayOfMonth < 10 ){
                        nd = "0"+ mdayOfMonth;
                }
    
    
                if ( (mmonth + 1) < 10){
                    nm = "0"+ ( mmonth +1 ) ;
                }else {
                    nm = ""+ ( mmonth + 1) ;
                }
                Log.d("testValue" , String.valueOf( mmonth ));
    
                // for button text
                btnDate.setText( ( myear + "-" +  nm + "-" + nd));
    
            }
        },year,month,day );
    

    【讨论】:

      猜你喜欢
      • 2014-12-16
      • 2015-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多