我正在使用以下代码。当我按下editText时,它会显示一个日历并设置日期。
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();
}
};
private void updateDisplay()
{
int cmpYear ;
int cmpMonth ;
int cmpDay;
final Calendar c = Calendar.getInstance();
cmpYear = c.get(Calendar.YEAR);
cmpMonth = c.get(Calendar.MONTH);
cmpDay = c.get(Calendar.DAY_OF_MONTH);
if (cmpMonth == mMonth && cmpYear == mYear && cmpDay == mDay)
date.setText("Today");
else if (cmpMonth == mMonth && cmpYear == mYear && cmpDay == (mDay - 1))
date.setText("Yesterday");
else
{
date.setText(
new StringBuilder()
// Month is 0 based so add 1
.append(mDay).append("-")
.append(mMonth + 1).append("-")
.append(mYear).append(" "));
}
java.util.Date today = new java.util.Date();
long t = today.getTime();
java.sql.Date dt = new java.sql.Date(t);
dt.setYear(mYear);
dt.setMonth(mMonth);
dt.setDate(mDay);
transaction.transactionDateTime = dt;
}
//这里是问题,mYear,mMonth,mDay显示正确的值1,3,2012但是当我在dt中设置它们时,dt将mYear保存为3079而不是2012。 请告诉我如何解决这个日期问题
最好的注意事项
答案 0 :(得分:1)
我很惊讶它给你3079而不是3912,这是我所期望的,因为记录了Date.setYear
:
将此Date对象的年份设置为指定值加上1900.修改此Date对象,使其表示指定年份内的某个时间点,其中月,日,时,分和秒相同和以前一样,在当地时区解释。 (当然,如果日期是2月29日,并且年份设置为非闰年,则新日期将被视为3月1日。)
请注意,这是一个已弃用的方法 - 您确实不应该使用它。
使用Calendar
进行日历计算,然后致电calendar.getTime()
找到合适的时刻。您可以从中构建java.sql.Date
。
(理想情况下,您会使用Joda Time代替,但在Android应用中,这对您来说可能过于依赖。)