将时间跨度(long和TimeUnit)添加到java.util.Date的最佳方法?

时间:2011-05-26 21:09:11

标签: java time

我正在尝试实施此方法:

/**
 * Adds the given span to the given date and returns a new date.
 */
public java.util.Date add(java.util.Date d, long span, java.util.concurrent.TimeUnit unit) {
    // ...
}

我可以在设备上进行切换。有没有这样做的图书馆?阿帕奇公地?乔达?

3 个答案:

答案 0 :(得分:8)

您无需打开设备 - 只需要询问正确的毫秒数:

return new Date(d.getTime() + unit.toMillis(span));

另一方面,我肯定会尝试使用Joda代替:)

答案 1 :(得分:2)

  

有没有这样做的图书馆?阿帕奇公地?约达

是的,如果TimeUnit不是强制性的,Jodatime为此提供了方便(以及DST安全!)方法。

DateTime now = new DateTime();
DateTime tomorrow = now.plusDays(1);
DateTime lastYear = now.minusYears(1);
DateTime nextHour = now.plusHours(1);
// ...

了解更多方法,了解DateTime API

答案 2 :(得分:0)

正确的方法是非常重要的。你有两种情况(假设你不介意忽略闰秒)。

如果您想将TimeUnit.DAYS解释为24小时(相对于23到25小时之间的某些内容,具体取决于DST更改),那么您只需添加毫秒:

public static Date add(Date base, long span TimeUnit unit) {
  return new Date(base.getTime() + unit.toMillis(span);
}

如果你想识别DST,那么你将需要特殊情况DAYS:

public static Date add(Date base, long span TimeUnit unit) {
  if (TimeUnit.DAYS.equals(unit)) {
    Calendar c = Calendar.getInstance();
    c.setTime(base);
    c.add(Calendar.DAY_OF_MONTH, (int) span);
    return c.getTime();
  }
  return new Date(base.getTime() + unit.toMillis(span);
}