如何减去x个工作日

时间:2013-01-17 18:32:07

标签: java datetime jodatime

  

可能重复:
  joda time - add weekdays to date

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

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

1 个答案:

答案 0 :(得分: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) {}
   }
}