我在Java中编写了以下函数,将datetime转换为int。 int值与.Net中的“new TimeSpan(dateTime.Value.Date.Ticks).Days”相同。
@SuppressLint("SimpleDateFormat")
public static long DateToInt(String date) {
SimpleDateFormat dfDate = new SimpleDateFormat("dd/MM/yyyy");
Date startDate = null;
Date presentDate = null;
try {
startDate = dfDate.parse("01/01/1900");
presentDate = dfDate.parse(date);
} catch (java.text.ParseException e) {
e.printStackTrace();
}
long diff = presentDate.getTime() - startDate.getTime();
long diffDays = diff / (24 * 60 * 60 * 1000);
diffDays = diffDays + 693595;
return diffDays;
}
此功能在Android 19中运行良好,但在Android 23上它返回不同的值。 例如在Android 19中,如果我传递参数“02/08/2016”,则在Android 19上此函数返回736177,在Android 23上此函数返回736176。
请帮助我在所有Android版本上获得相同的价值。
答案 0 :(得分:0)
发现问题。 如果我通过“08/02/2016”,行
long diff = presentDate.getTime() - startDate.getTime();
返回不同的值。在Android 19上,它返回3679084800000,在Android 23上它返回3679081200000.
所以在除以(24 * 60 * 60 * 1000)之后,我在Android 19&上得到42582和42581.9。分别为23。
以下代码适用于Android 19& 23。
public static int DateToInt(String date) {
int dateInInteger = 693595;
SimpleDateFormat dfDate = new SimpleDateFormat("dd/MM/yyyy");
Date startDate = null;
Date presentDate = null;
try {
startDate = dfDate.parse("01/01/1900");
presentDate = dfDate.parse(date);
} catch (java.text.ParseException e) {
e.printStackTrace();
}
double diff = presentDate.getTime() - startDate.getTime();
double diffDays = diff / (24 * 60 * 60 * 1000);
return dateInInteger + (int) Math.ceil(diffDays);
}