Вопрос

I am getting incorrect results because of the daylight savings for that day.

I used,

Calendar todays = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles"));
todays.set(Calendar.HOUR_OF_DAY, 24);
todays.set(Calendar.MINUTE, 0);
todays.set(Calendar.SECOND, 0);
todays.set(Calendar.MILLISECOND, 0);

As mentioned in Joda-Time doc,

Consider adding 1 day at the daylight savings boundary. If you use a period to do the addition then either 23 or 25 hours will be added as appropriate. If you had created a duration equal to 24 hours, then you would end up with the wrong result.

I didn't found any example of how to implement such a period using Joda-Time.

So, I want to get the number of hours contained in each day dynamically rather hard coding it with 24 hours as mentioned.

Это было полезно?

Решение

The simplest approach is probably to use something like:

public int getHoursInDay(LocalDate date, DateTimeZone zone) {
    DateTime start = date.toDateTimeAtStartOfDay(zone);
    DateTime end = date.plusDays(1).toDateTimeAtStartOfDay(zone);
    return new Duration(start, end).getStandardHours();
}

EDIT: If you're using a version of Joda Time which doesn't support Duration.getStandardHours() you could use:

public int getHoursInDay(LocalDate date, DateTimeZone zone) {
    DateTime start = date.toDateTimeAtStartOfDay(zone);
    DateTime end = date.plusDays(1).toDateTimeAtStartOfDay(zone);
    long millis = new Duration(start, end).getMillis();
    return (int) (millis / DateTimeConstants.MILLIS_PER_HOUR);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top