【问题标题】:Why is my date picker in android displaying the year wrong?为什么我在 android 中的日期选择器显示年份错误?
【发布时间】:2017-04-10 12:23:10
【问题描述】:

我已经为我的应用程序创建了这个 datePicker,并且我将它设置为在用户选择日期后显示 Toast。这只是在我继续做其他事情之前的一个测试,但是,当我选择一个日期时,它会显示错误的年份。例如,当我选择今天的日期时,Toast 会显示:“Date is: 3917-04-10”。

public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener
{
SimpleDateFormat dateFormatter;
Date start;
String entered_Start;

@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
    final Calendar calendar = Calendar.getInstance();
    int yyyy = calendar.get(Calendar.YEAR);
    int mm = calendar.get(Calendar.MONTH);
    int dd = calendar.get(Calendar.DAY_OF_MONTH);
    return new DatePickerDialog(getActivity(), this, yyyy, mm, dd);
}

public void onDateSet(DatePicker view, int yyyy, int mm, int dd)
{
    start = new Date(yyyy,mm,dd);
    dateFormatter = new SimpleDateFormat("yyyy-MM-dd");
    entered_Start = dateFormatter.format(start);
    Toast.makeText(getActivity(), "Date is: "+ entered_Start, Toast.LENGTH_LONG).show();
}
}

感谢任何帮助。

编辑:我修好了。我所要做的就是改变这一行:

start = new Date(yyyy,mm,dd);

到这条线:

start = calendar.getTime();   

【问题讨论】:

  • 您是否设置了dateFormat?默认日期选择器日期格式为Default: "mm/dd/yy"
  • 您使用的已弃用的 Date 构造函数将 1900 添加到年份。因此,如果你将 2017 传递给它,你会得到一个 3917 的日期。如果你应该使用它(不推荐),你需要将 117 传递给 2017。

标签: java android date datepicker


【解决方案1】:

不推荐使用Date 构造函数。 Here你可以看到

This constructor was deprecated in API level 1. As of JDK version 1.1, replaced by Calendar.set(year + 1900, month, date) or GregorianCalendar(year + 1900, month, date)

最好使用 Calendar 对象的 setter,就像在创建对话框之前使用 getter 一样。

calendar.set(Calendar.YEAR, yyyy);
calendar.set(Calendar.MONTH, mm);
calendar.set(Calendar.DAY_OF_MONTH, dd);

是的,您可以使用new Date(yyyy - 1900,mm,dd)。但这很糟糕。

【讨论】:

    【解决方案2】:

    不要使用new Date(yyyy,mm,dd);使用

    Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, yyyy);
        c.set(Calendar.MONTH, mm);
        c.set(Calendar.DAY_OF_MONTH, dd);
        c.getTime();
    

    【讨论】:

      【解决方案3】:

      new Date() 已被弃用,您可以(更好)使用Calendar

      您的代码将如下所示:

      Calendar cal = Calendar.getInstance();
      cal.set(Calendar.YEAR,yyyy);
      cal.set(Calendar.DAY_OF_MONTH,dd);
      cal.set(Calendar.MONTH,mm);
      
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      entered_Start  = sdf.format(cal.getTime());
      Toast.makeText(getActivity(), "Date is: "+ entered_Start, Toast.LENGTH_LONG).show();
      

      【讨论】:

        【解决方案4】:
        int day = datePicker1.getDayOfMonth();
        int mon = datePicker1.getMonth();
        int ye = datePicker1.getYear();
        
                    SimpleDateFormat dt=new SimpleDateFormat("yyyy-MM-dd");
                    Date d=new Date(ye,mon,day);
                    String sdt=dt.format(d);
        
                    System.out.println("Date>>>>>>"+sdt);//Date>>>>>>3922-02-28
        
                    Calendar c = Calendar.getInstance();
                    c.set(Calendar.YEAR, ye);
                    c.set(Calendar.MONTH, mon);
                    c.set(Calendar.DAY_OF_MONTH, day);
                    //c.getTime();
                    System.out.println("Date<<<<"+dt.format(c.getTime())); //Date<<<<2022-02-28
        

        【讨论】:

          猜你喜欢
          • 2014-08-20
          • 1970-01-01
          • 1970-01-01
          • 2010-09-21
          • 1970-01-01
          • 2021-11-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多