java - 如何减去 x 个工作日

标签 java datetime jodatime

Possible Duplicate:
joda time - add weekdays to date

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

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

最佳答案

可能没有办法直接使用 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) {}
   }
}

关于java - 如何减去 x 个工作日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14385772/

相关文章:

java - 使用 HashMap 更新具有相同键的多个值的问题

vb.net - 以分钟为单位的日期和时差

mongodb - ReactiveMongo 0.9 : Joda Datetime Implicit Conversion for Macros. 处理程序

scala - 通过 joda DateTime 范围 scala/casbah 查找 mongodb 条目

java - 在没有字符串比较的情况下以数学方式查找数字子字符串

java - Java 中的可选条件运算符导致 NullPointerException

java - 用随机颜色绘制形状

datetime - Ansible - 将日期增加 'X' 天/分钟

c# - 日期时间比较精度

java - 在运行时识别当前使用的 Joda-Time 库的版本