函数在不同的Android版本中返回不同的日期时间值

时间:2016-11-14 04:18:19

标签: java android datetime

我在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版本上获得相同的价值。

1 个答案:

答案 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);
}