【发布时间】:2016-07-12 18:06:07
【问题描述】:
我正在使用 Android 中的时间选择器和日期选择器对话框。为了保存 DATE 和 TIME,我在 Sqlite 中使用 INTEGER 数据类型。所以我做了一些实用函数来将日期选择器对话框中的 DATE 转换为 LONG(TIMESTAMP) 格式,并将它们转换回用户可读的 DATE。但不知何故,他们给了我错误的结果。
//Date Picker OnDateSetListener
private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener(){
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
String dateText = getTimeString(year,monthOfYear,dayOfMonth);
long date = Utility.getDateLong(year,monthOfYear,dayOfMonth);
taskModel.setEndDate(date);
endDateView.setText(dateText);
}
};
private String getTimeString(int year, int monthOfYear, int dayOfMonth){
Log.i("set_date",monthOfYear+"");
String yearText = String.valueOf(year);
String monthText = String.valueOf(monthOfYear);
String dayText = String.valueOf(dayOfMonth);
return dayText+"/"+monthText+"/"+yearText;
}
//Utility Functions
//Getting long(TIMESTAMP) from DATE
public static long getDateLong(int year, int month, int day){
Calendar calendar = new GregorianCalendar(year, month, day);
Date date = calendar.getTime();
long timeStamp = date.getTime();
return timeStamp;
}
//Converting TIMESTAMP to DATE
public static String getDateFromLongValue(long d){
Date date = new Date(d);
//Calendar calendar = new GregorianCalendar();
//calendar.setTimeInMillis(d);
//return calendar.get(Calendar.DAY_OF_MONTH)+"/"+calendar.get(Calendar.MONTH)+"/"+calendar.get(Calendar.YEAR);
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
String formattedDate = dateFormat.format(date);
return formattedDate;
}
我输入的 DATE 的 TIMESTAMP 错误。例如,如果输入的 DATE 是 09-06-2016("dd-MM-yyyy"),则转换后的 long 值为 -876215232,当转换回日期时会得到 22-12-1969。
此外,当我从选择器中选择 DATE 时,我弄错了月份。即,如果我选择 9th;July;2016, monthOfYear 属性,我将得到 6 而不是 7。 谁能指出错误。
【问题讨论】:
-
公历月份从 0 到 11 开始,即 1 月是该日历中一年中的第 0 个月。检查 Java 文档。这就是为什么你得到 6 而不是正确的 7。
标签: java android sqlite date datetime