Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何计算从给定日期算起的X周天数的日期?_Java_Simpledateformat - Fatal编程技术网

Java 如何计算从给定日期算起的X周天数的日期?

Java 如何计算从给定日期算起的X周天数的日期?,java,simpledateformat,Java,Simpledateformat,我可以将102天添加到我输入的任何日期,但现在的问题是,不包括周末,它应该是102周。我该怎么做 以下是我仅添加102天的代码: private void txtStartKeyReleased(java.awt.event.KeyEvent evt) { try { Date date1 = new SimpleDateFormat("yyyy-MM-dd").parse(txtStart.getText()); SimpleDateForma

我可以将102天添加到我输入的任何日期,但现在的问题是,不包括周末,它应该是102周。我该怎么做

以下是我仅添加102天的代码:

private void txtStartKeyReleased(java.awt.event.KeyEvent evt) {
    try {    
        Date date1 = new SimpleDateFormat("yyyy-MM-dd").parse(txtStart.getText());

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");     
        Calendar cal  = Calendar.getInstance();
        cal.setTime(date1);
        cal.add(Calendar.DATE, 102);
        String expDateString = sdf.format(cal.getTime());
        txtExpiry.setText(expDateString);
    } catch (ParseException ex) {
        Logger.getLogger(ClientInfo.class.getName()).log(Level.SEVERE, null, ex);
    } 
}

下面呢

for (int i = 1; i <= 102; i++)
{
    DateTime thisOne = DateTime.Parse("2012-03-13");

    string thisDay = thisOne.ToString("dddd");

    if (thisDay != "Saturday" && thisDay != "Sunday")
    {
        cal.add(Calendar.DATE, i);
    }
}

编辑:为自定义日期更新

我只是粘贴代码块,不包括周末。请根据你的用途使用这个

int numberOfDays = 102;
int count = 1;
String expDateString = null;
Date temp = date1;
while(count != numberOfDays){
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");     
    Calendar cal  = Calendar.getInstance();
    cal.setTime(temp);
    int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK );
    if(!(dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY)){
        cal.add(Calendar.DATE, count);
        count++;
    }
    temp = cal.getTime();
    expDateString = sdf.format(cal.getTime());
}
这应将忽略周末的工作日添加到日期中。如果您在工作日通过0,则将进入下一个工作日。因此,周六+1个工作日=周二

编辑:

在代码中,只需替换为以下内容:

private static Date addWeekdaysToDate(Date date, int weekdays) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    int originalDayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
    int numWeeks = weekdays / 5;
    int remainderDays = weekdays % 5;
    cal.add(Calendar.DAY_OF_MONTH, numWeeks * 7 + remainderDays);

    int adjustmentDays = 0;
    if (originalDayOfWeek == Calendar.SUNDAY) {
        adjustmentDays = 1;
    } else if (originalDayOfWeek + remainderDays > Calendar.FRIDAY) {
        adjustmentDays = 2;
    }
    cal.add(Calendar.DAY_OF_MONTH, adjustmentDays);
    return cal.getTime();
}

private static SimpleDateFormat inputDateFormat = new SimpleDateFormat("yyyy-MM-dd");
private void txtStartKeyReleased(java.awt.event.KeyEvent evt) {
    try {
        txtExpiry.setText(
            inputDateFormat.format(
                addWeekdaysToDate(inputDateFormat.parse(txtStart.getText()), 102)
            )
        );
    } catch (ParseException ex) {
        Logger.getLogger(ClientInfo.class.getName()).log(Level.SEVERE, null, ex);
    } 
}

我不明白你的问题。是否包括周末?不包括周末。到期日应为102天,但周末不应到期counted@JMK,您的解决方案是C语言。问题是关于Java的;这是您从txtStart right分配的原始起始日期。我不想更改该实例,因此我已将其分配给一个临时变量。我已经完成了您的代码,但当我运行它时,当我尝试在txtStart上输入日期的最后一位时,UI有点挂起。请检查您的控制台是否有任何异常。当我把这个程序作为一个独立的应用程序运行时,我的意思是使用publicstaticvoidmain,它可以正常工作。如果有异常,请检查。我知道了。请尝试在focusOut事件中编写代码,而不是keyRelease事件,因为每次释放密钥时都会触发keyRelease,而您不需要这样做,因为一旦调出焦点,您将获得完整的日期。否则,日期格式将出现异常。。。
private static Date addWeekdaysToDate(Date date, int weekdays) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    int originalDayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
    int numWeeks = weekdays / 5;
    int remainderDays = weekdays % 5;
    cal.add(Calendar.DAY_OF_MONTH, numWeeks * 7 + remainderDays);

    int adjustmentDays = 0;
    if (originalDayOfWeek == Calendar.SUNDAY) {
        adjustmentDays = 1;
    } else if (originalDayOfWeek + remainderDays > Calendar.FRIDAY) {
        adjustmentDays = 2;
    }
    cal.add(Calendar.DAY_OF_MONTH, adjustmentDays);
    return cal.getTime();
}

private static SimpleDateFormat inputDateFormat = new SimpleDateFormat("yyyy-MM-dd");
private void txtStartKeyReleased(java.awt.event.KeyEvent evt) {
    try {
        txtExpiry.setText(
            inputDateFormat.format(
                addWeekdaysToDate(inputDateFormat.parse(txtStart.getText()), 102)
            )
        );
    } catch (ParseException ex) {
        Logger.getLogger(ClientInfo.class.getName()).log(Level.SEVERE, null, ex);
    } 
}