【问题标题】:How to get datepicker value in date format?如何以日期格式获取日期选择器值?
【发布时间】:2013-01-28 20:46:01
【问题描述】:

我的数据选择器有问题

我使用代码获取如下所示的日期、月份和年份

           DatePicker datePicker;
           datePicker = (DatePicker) findViewById(R.id.dateselect);

           int   day  = datePicker.getDayOfMonth();
           int   month= datePicker.getMonth() + 1;
           int   year = datePicker.getYear();

但是当我打印日期时,它显示的值是 7 而不是 07 对于月份,它显示值 2 而不是 02

我希望这些整数数据采用日期格式,即;例如:02-02-2013, 24-12-2013
有什么办法吗???

【问题讨论】:

    标签: android date datepicker date-conversion


    【解决方案1】:

    您可以像这样格式化日期:

    int   day  = datePicker.getDayOfMonth();
    int   month= datePicker.getMonth();
    int   year = datePicker.getYear();
    Calendar calendar = Calendar.getInstance();
    calendar.set(year, month, day);
    
    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
    String formatedDate = sdf.format(calendar.getTime());
    

    您可以通过调用将字符串解析回日期对象

    Date date = sdf.parse(formatedDate);
    

    【讨论】:

    • 这是正确的做法。格式化日期的对象已经存在,使用变通方法没有意义。
    • 日期(年、月、日)已弃用 calendar.set(年、月、日); SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); String formatedDate = sdf.format(calendar.getTime());
    • 这个答案比选择的答案好
    【解决方案2】:
     public String checkDigit(int number)
        {
            return number<=9?"0"+number:String.valueOf(number);
        }
    

    基本用法:

    month=checkDigit(month);
    input 7
    output 07
       String date=checkDigit(monthOfYear+1)+"/"+checkDigit(dayOfMonth)+"/"+year;
    

    【讨论】:

      【解决方案3】:
      <?xml version="1.0" encoding="utf-8"?>
      

      <Button
          android:id="@+id/btnChangeDate"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Change Date" />
      
      <TextView
          android:id="@+id/lblDate"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Current Date (M-D-YYYY): "
          android:textAppearance="?android:attr/textAppearanceLarge" />
      
      <TextView
          android:id="@+id/tvDate"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text=""
          android:textAppearance="?android:attr/textAppearanceLarge" />
      
      <DatePicker
          android:id="@+id/dpResult"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content" />
      

      package com.mkyong.android;
      
         import java.util.Calendar;
       import android.app.Activity;
       import android.app.DatePickerDialog;
       import android.app.Dialog;
       import android.os.Bundle;
       import android.view.View;
       import android.view.View.OnClickListener;
       import android.widget.Button;
       import android.widget.DatePicker;
       impot android.widget.TextView;
      
       public class MyAndroidAppActivity extends Activity {
      
      private TextView tvDisplayDate;
      private DatePicker dpResult;
      private Button btnChangeDate;
      
      private int year;
      private int month;
      private int day;
      
      static final int DATE_DIALOG_ID = 999;
      
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
      
          setCurrentDateOnView();
          addListenerOnButton();
      
      }
      
      // display current date
      public void setCurrentDateOnView() {
      
          tvDisplayDate = (TextView) findViewById(R.id.tvDate);
          dpResult = (DatePicker) findViewById(R.id.dpResult);
      
          final Calendar c = Calendar.getInstance();
          year = c.get(Calendar.YEAR);
          month = c.get(Calendar.MONTH);
          day = c.get(Calendar.DAY_OF_MONTH);
      
          // set current date into textview
          tvDisplayDate.setText(new StringBuilder()
              // Month is 0 based, just add 1
              .append(month + 1).append("-").append(day).append("-")
              .append(year).append(" "));
      
          // set current date into datepicker
          dpResult.init(year, month, day, null);
      
      }
      
      public void addListenerOnButton() {
      
          btnChangeDate = (Button) findViewById(R.id.btnChangeDate);
      
          btnChangeDate.setOnClickListener(new OnClickListener() {
      
              @Override
              public void onClick(View v) {
      
                  showDialog(DATE_DIALOG_ID);
      
              }
      
          });
      
      }
      
      @Override
      protected Dialog onCreateDialog(int id) {
          switch (id) {
          case DATE_DIALOG_ID:
             // set date picker as current date
             return new DatePickerDialog(this, datePickerListener, 
                           year, month,day);
          }
          return null;
      }
      
      private DatePickerDialog.OnDateSetListener datePickerListener 
                  = new DatePickerDialog.OnDateSetListener() {
      
          // when dialog box is closed, below method will be called.
          public void onDateSet(DatePicker view, int selectedYear,
                  int selectedMonth, int selectedDay) {
              year = selectedYear;
              month = selectedMonth;
              day = selectedDay;
      
              // set selected date into textview
              tvDisplayDate.setText(new StringBuilder().append(month + 1)
                 .append("-").append(day).append("-").append(year)
                 .append(" "));
      
              // set selected date into datepicker also
              dpResult.init(year, month, day, null);
      
          }
      };
      

      }

      【讨论】:

        【解决方案4】:

        API level 12开始,DatePickerpublic CalendarView getCalendarView (),使用这个视图可以得到日期:

        long dateTime = datePicker.getCalendarView().getDate();
        Date date = new Date(dateTime);
        

        然后根据需要格式化:

        DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
        String formattedDate = dateFormat.format(date);
        

        【讨论】:

        【解决方案5】:

        您可以使用自定义方法以所需格式设置日期和月份

            private static String  pad(int c)
            {
                return c>=10 ? ""+c : "0"+c;      
            }
        

        不要使用 datemonth 的值,而是使用 pad(date)pad(month)

        希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-14
          • 2014-05-08
          相关资源
          最近更新 更多