【问题标题】:How to get the date from the DatePicker widget in Android?如何从 Android 中的 DatePicker 小部件中获取日期?
【发布时间】:2011-09-19 07:06:05
【问题描述】:

我在 Android 中使用 DatePicker 小部件让用户设置日期,并希望在单击确认按钮时获取日期值,我该怎么做?

【问题讨论】:

    标签: android datepicker


    【解决方案1】:

    试试这个:

     DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker1);
     int day = datePicker.getDayOfMonth();
     int month = datePicker.getMonth() + 1;
     int year = datePicker.getYear();
    

    【讨论】:

    • 在更新 UI 中的日期选择器值时,这似乎对我不起作用。它给了我它开始的价值
    • 对。请尝试将 OnDateSetListener 设置为 datePicker。
    • 这对我有用。我像这样设置这些值 String day = String.valueof(datePicker.getDayOfMonth(); 它到目前为止工作得很好,因为它在我的情况下将整数转换为字符串以插入到 sql 数据库。
    【解决方案2】:

    我设法像这样以编程方式设置 MinDate 和 MaxDate :

        final Calendar c = Calendar.getInstance();
    
        int maxYear = c.get(Calendar.YEAR) - 20; // this year ( 2011 ) - 20 = 1991
        int maxMonth = c.get(Calendar.MONTH);
        int maxDay = c.get(Calendar.DAY_OF_MONTH);
    
        int minYear = 1960;
        int minMonth = 0; // january
        int minDay = 25;
    
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.create_account);
            BirthDateDP = (DatePicker) findViewById(R.id.create_account_BirthDate_DatePicker);
            BirthDateDP.init(maxYear - 10, maxMonth, maxDay, new OnDateChangedListener()
            {
    
            @Override
            public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
            {
                if (year < minYear)
                    view.updateDate(minYear, minMonth, minDay);
    
                    if (monthOfYear < minMonth && year == minYear)
                    view.updateDate(minYear, minMonth, minDay);
    
                    if (dayOfMonth < minDay && year == minYear && monthOfYear == minMonth)
                    view.updateDate(minYear, minMonth, minDay);
    
    
                    if (year > maxYear)
                    view.updateDate(maxYear, maxMonth, maxDay);
    
                    if (monthOfYear > maxMonth && year == maxYear)
                    view.updateDate(maxYear, maxMonth, maxDay);
    
                    if (dayOfMonth > maxDay && year == maxYear && monthOfYear == maxMonth)
                    view.updateDate(maxYear, maxMonth, maxDay);
            }}); // BirthDateDP.init()
        } // activity
    

    它对我来说很好,享受:)

    【讨论】:

    • 我想做相反的事情,这意味着最小日期将是当前日期,最大日期将是大于当前日期的任何日期。怎么做。任何帮助将不胜感激。我试过但遇到了一些问题。看看这个stackoverflow.com/questions/8675984/…
    【解决方案3】:

    如果您使用的是 Kotlin,您可以为 DatePicker 定义一个 extension function

    fun DatePicker.getDate(): Date {
        val calendar = Calendar.getInstance()
        calendar.set(year, month, dayOfMonth)
        return calendar.time
    }
    

    那么,就是:datePicker.getDate()。就好像它一直存在一样。

    【讨论】:

      【解决方案4】:

      您的意思是您想将 DatePicker 小部件添加到您的应用中。

      将全局变量声明到您的活动类中:

      private Button mPickDate;
      private int mYear;
      private int mMonth;
      private int mDay;
      static final int DATE_DIALOG_ID = 0;
      

      将此代码写入 onCreate() 函数:

      //date picker presentation
          mPickDate = (Button) findViewById(R.id.pickDate);//button for showing date picker dialog 
          mPickDate.setOnClickListener(new View.OnClickListener() {
              public void onClick(View v) { showDialog(DATE_DIALOG_ID); }
          });
      
          // get the current date
          final Calendar c = Calendar.getInstance();
          mYear = c.get(Calendar.YEAR);
          mMonth = c.get(Calendar.MONTH);
          mDay = c.get(Calendar.DAY_OF_MONTH);
      
      
          // display the current date
          updateDisplay();
      

      在 onCreate() 函数之外写下这些函数:

      //return date picker dialog
      @Override
      protected Dialog onCreateDialog(int id) {
          switch (id) {
          case DATE_DIALOG_ID:
              return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay);
          }
          return null;
      }
      
      //update month day year
      private void updateDisplay() {
          mBodyText.setText(//this is the edit text where you want to show the selected date
              new StringBuilder()
                  // Month is 0 based so add 1
              .append(mYear).append("-")
              .append(mMonth + 1).append("-")
              .append(mDay).append(""));
      
      
                  //.append(mMonth + 1).append("-")
                  //.append(mDay).append("-")
                  //.append(mYear).append(" "));
      }
      
      // the call back received when the user "sets" the date in the dialog
      private DatePickerDialog.OnDateSetListener mDateSetListener =
          new DatePickerDialog.OnDateSetListener() {
              public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                  mYear = year;
                  mMonth = monthOfYear;
                  mDay = dayOfMonth;
                  updateDisplay();
              }
      };
      

      【讨论】:

      • 确实不错,如果需要在EditText中输入生日也可以实现
      • 请注意:onCreateDialog已被弃用,您可以创建一个DialogFragment来使用
      【解决方案5】:

      您也可以使用此代码...

      datePicker = (DatePicker) findViewById(R.id.schedule_datePicker);
      int day = datePicker.getDayOfMonth();
      int month = datePicker.getMonth() + 1;
      int year = datePicker.getYear();
      
      
      SimpleDateFormat dateFormatter = new SimpleDateFormat("MM-dd-yyyy");
      Date d = new Date(year, month, day);
      String strDate = dateFormatter.format(d);
      

      【讨论】:

        【解决方案6】:

        DatePicker 类具有获取月、年、日的方法。或者您可以使用OnDateChangedListener

        【讨论】:

          【解决方案7】:

          你也可以使用 te Calendar.GregorianCalendar java 类

              GregorianCalendar calendarBeg=new GregorianCalendar(datePicker.getYear(),
                  datePicker.getMonth(),datePicker.getDayOfMonth());
              Date begin=calendarBeg.getTime();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-05
            • 2016-03-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多