为什么我的日期选择器在android显示年份错误?

时间:2017-04-10 12:23:11

标签: java android date datepicker

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

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

感谢任何帮助。

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

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);

3 个答案:

答案 0 :(得分:0)

不要使用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();

答案 1 :(得分:0)

不推荐使用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 :(得分:0)

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();