如何在Java GWT中进行日历操作?如何给日期添加天数?

49

GWT没有提供GregorianCalendar类,那么如何在客户端上进行日历操作?

我有一个Date类型的变量a,我想得到从a开始n天后的日期。

示例:

a (2000-01-01) + n (1) -> 2000-01-02
a (2000-01-01) + n (31) -> 2000-02-01
4个回答

69

如果您需要添加除“天”以外的时间单位(例如:小时),@Chris Lercher提供的另一种答案可能会有所帮助。 - cellepo

9
谷歌目前似乎使用的答案是:
  @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 Time 的建议:http://code.google.com/p/google-web-toolkit/issues/detail?id=603。目前最后一条评论指出,有一个新的 goda time 分支,也许我们应该真的去看看它。


您同样可以调用Date的其他设置方法来添加不同单位的时间(例如:setHours) - cellepo

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));
}

这将适用于闰年,但在添加或删除闰秒的千年时会最终偏移毫秒。


5
+1,但请注意:这非常取决于您想要实现什么目的。通常,将7天添加到“2011-03-22 10:00:00 CET”应该得出“2011-03-29 10:00:00 CET”(即本地时间应保持在10点)。但由于CET中在这两个日期之间发生了时钟更改(DST),毫秒计算将得出不同的结果。再次强调,这取决于您想要进行的计算类型! - Chris Lercher
这在夏令时方面会失败。在夏令时的晚上,添加24小时并不等同于添加1天。 - Alex K.

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接