Java проблема последнего дня месяца

Я пытаюсь создать диапазон дат, охватывающий полный месяц, т.е.

У меня есть контрольная дата, и я пытаюсь создать на ее основе новую дату. У меня проблема с "endDate" ...

Я пытаюсь создать диапазон дат, охватывающий полный месяц, т.е.

У меня есть контрольная дата, и я пытаюсь создать на ее основе новую дату. У меня проблема с "endDate" ...

Я пытаюсь создать диапазон дат, охватывающий полный месяц, т.е.

[startDate; endDate]

Таким образом, у меня есть справочная дата, и я пытаюсь создать на ее основе новую дату. У меня проблема с "endDate", потому что я хочу, чтобы он был ближе к концу дня (т.е. 23:59:59).

Я использую следующий код:

  public static Date previousMonthLastDate(Date referenceDate) {
    Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
    calendar.setTime(referenceDate);
    calendar.add(Calendar.MONTH, -1); // move to the previous month
    int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    calendar.set(Calendar.DAY_OF_MONTH, lastDay);
    // set the time to be the end of the day
    calendar.set(Calendar.HOUR_OF_DAY, 23);
    calendar.set(Calendar.MINUTE, 59);
    calendar.set(Calendar.SECOND, 59);

    return calendar.getTime();
  }

Этот код работает должным образом на эмуляторе Android . Однако запуск его на реальном телефоне дает неверную дату. Таким образом, я предполагаю, что это какая-то проблема с часовым поясом.

По телефону вместо того, чтобы сказать 31 августа 2010 года, отображается 01 сентября 2010 года. Это значение должно быть установлено после строки кода, которая устанавливает HOUR_OF_DAY равным 23.

Есть идеи?

Спасибо.

7
задан MyNameIsZero 8 September 2010 в 21:29
поделиться