0

我有一个要求,比如计算两个日期之间的剩余天数。它对我来说很好。但问题是当我将构建发送到英国时,与印度相比,它显示的时间少了一天(例如:印度:215 天,但在英国:214 天)。我正在使用以下代码:

public static int noOfDays(String currDate, String tarDate){
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    Date date1 = null;
    Date date2 = null;

    try {
        date1 = sdf.parse(currDate);
        date2 = sdf.parse(tarDate);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return (int)( (date2.getTime() - date1.getTime()) / (1000 * 60 * 60 * 24));
}   

获取当前日期:

public static String getcurrentdate()
{
    Calendar now = Calendar.getInstance();

    int month = now.get(Calendar.MONTH) + 1;
    int year = now.get(Calendar.YEAR);
    int day = now.get(Calendar.DATE);
    return day+"/"+month+"/"+year;
}

我相信现在 Calendar = Calendar.getInstance(); 将只给出本地时区实例。如果它是正确的,那么它应该在任何位置给出相同的结果。但结果似乎不同。请帮我解决这个问题。

谢谢, 加内什

4

3 回答 3

1

您需要设置 Calender 类的 TimeZone。你可以这样做:

Calender.setTimeZone(timeZone);

您可以使用以下方法获取应用程序运行位置的时区:

TimeZone.getDefault();
于 2012-11-27T10:08:36.490 回答
1

在存储和进行时间计算时,您应该将所有时间戳存储在 UTC 中。然后将时区显式设置为 UTC。
如果必须在显示器上显示本地时间,则必须在显示前立即转换 Utc 时间戳,不要将本地时间存储在数据库中。
如果您需要本地时间,则需要将额外的时区信息与您的 UTC 时间一起存储。

于 2012-11-27T10:01:42.693 回答
0

使用 JodaTime 库进行日期计算并始终以 UTC 存储日期。

于 2012-11-27T10:04:03.683 回答