Ответ 1
Обновленный ответ для GWT 2.1
final Date dueDate = new Date();
CalendarUtil.addDaysToDate(dueDate, 21);
Изменить: полное имя этого класса com.google.gwt.user.datepicker.client.CalendarUtil.
Так как GWT не предоставляет класс GregorianCalendar, как выполнять операции с календарем на клиенте?
У меня есть дата a
, и мне нужна дата, которая n
дней после a
.
Примеры:
a (2000-01-01) + n (1) -> 2000-01-02
a (2000-01-01) + n (31) -> 2000-02-01
Обновленный ответ для GWT 2.1
final Date dueDate = new Date();
CalendarUtil.addDaysToDate(dueDate, 21);
Изменить: полное имя этого класса com.google.gwt.user.datepicker.client.CalendarUtil.
Ответ, который 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, возможно, нам стоит ее проверить.
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));
}
это будет работать с високосными годами, но в конце концов будет отклоняться миллисекундами на тысячу лет, когда мы добавим или сбросим секунды прыжка.
Я создал грубую реализацию, которая эмулирует TimeZone, Calendar и Locale. Не стесняйтесь попробовать здесь: