我已经为我的应用创建了这个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);
答案 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();