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のある種のJoda時間に投票しています: http://code.google.com/p/google-web-toolkit/issues/detail?id=6 。現在の最後のコメントは、goda timeの新しい分岐があると述べています。
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をエミュレートする大まかな実装を作成しました。ここで試してみてください: