Как выполнять календарные операции в Java GWT? Как добавить дни к дате?

Так как GWT не предоставляет класс GregorianCalendar, как выполнять операции с календарем на клиенте?

У меня есть дата a, и мне нужна дата, которая n дней после a.

Примеры:

a (2000-01-01) + n (1) -> 2000-01-02
a (2000-01-01) + n (31) -> 2000-02-01

Ответ 1

Обновленный ответ для GWT 2.1

final Date dueDate = new Date();
CalendarUtil.addDaysToDate(dueDate, 21);

Изменить: полное имя этого класса com.google.gwt.user.datepicker.client.CalendarUtil.

Ответ 2

Ответ, который Google использует (в настоящее время):

  @SuppressWarnings("deprecation") // GWT requires Date
  public static void addDaysToDate(Date date, int days) {
    date.setDate(date.getDate() + days);
  }

Это из класса com.google.gwt.user.datepicker.client.CalendarUtil, который используется com.google.gwt.user.datepicker.client.DatePicker. Я полагаю, что при выполнении вычислений в разных часовых поясах будут возникать проблемы.

Многие люди уже проголосовали за какое-то время Джоды для GWT: http://code.google.com/p/google-web-toolkit/issues/detail?id=603. В последнем последнем комментарии говорится, что есть новая вилка времени goda, возможно, нам стоит ее проверить.

Ответ 3

private static final long MILLISECONDS_IN_SECOND = 1000l;
private static final long SECONDS_IN_MINUTE = 60l;
private static final long MINUTES_IN_HOUR = 60l;
private static final long HOURS_IN_DAY = 24l;
private static final long MILLISECONDS_IN_DAY = MILLISECONDS_IN_SECOND *
        SECONDS_IN_MINUTE *
        MINUTES_IN_HOUR *
        HOURS_IN_DAY;
public Date addDays (Date date, days)
{
 return new Date (date.getTime () + (days * MILLISECONDS_IN_DAY));
}

это будет работать с високосными годами, но в конце концов будет отклоняться миллисекундами на тысячу лет, когда мы добавим или сбросим секунды прыжка.