2

可能重复:
joda time - 添加工作日到日期

如何使用 Joda 库从日期中减去一定数量的工作日(即不包括周末)?

如果输入日期是 2013 年 1 月 14 日(星期一)并且我减去 1 天,我希望结果是 2013 年 1 月 11 日(星期五)。我怎样才能做到这一点?

4

1 回答 1

3

可能无法直接使用 Joda 库执行此操作,但您可以编写自己的 Java 功能。在以下示例中,该subtractWeekdays(d, num)方法将日期d回滚给定num的工作日。此示例的输出Fri Jan 11 00:00:00 CST 2013如您所愿。

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class SimpleTest  {
   // NOTE: the input num must be positive.
   public static Date subtractWeekdays(Date d, int num) {
      int count = 0;
      Calendar c = Calendar.getInstance();
      c.setTime(d);

      do {
         c.add(Calendar.DAY_OF_YEAR, -1);
         if(isWeekday(c.get(Calendar.DAY_OF_WEEK))) {
            ++count;
         }
      } while(count < num);

      return c.getTime();
   }

   public static boolean isWeekday(int dayOfWeek) {
      return ((dayOfWeek != Calendar.SATURDAY) && (dayOfWeek != Calendar.SUNDAY));
   }

   public static void main(String[] argv) {
      try {
         SimpleDateFormat dateFormat = new SimpleDateFormat("MMM d, y");
         Date d = dateFormat.parse("Jan 14, 2013");
         Date d2 = subtractWeekdays(d, 1);
         System.out.println(d2);
      } catch(Exception ex) {}
   }
}
于 2013-01-17T19:25:35.033 回答