2012-03-13 91 views
0

我能夠在我輸入的任何日期添加102天,但現在的問題是,它應該是102 天(不包括週末)。我怎樣才能做到這一點?如何計算距給定日期X個星期幾的日期?

這裏是我的代碼只是增加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); 
    } 
} 
+0

,我沒有得到你的問題。你想包括週末嗎?不包括週末的 – raddykrish 2012-03-13 20:33:23

+0

。它應該是102天到期,但是週末不應該計算在內 – zairahCS 2012-03-13 20:35:42

回答

0

這應該添加weekdays工作日(週末被忽略)上的日期。如果您通過0獲得weekdays,它將獲得下一個工作日。那麼,Saturday + 1 weekday = Tuesday

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 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); 
    } 
} 
0

怎麼樣以下?

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); 
    } 
} 

編輯:更新了自定義日期

+0

這是使用當前日期嗎? – zairahCS 2012-03-13 20:37:26

+0

@JMK,你的解決方案是在C#中。問題是關於Java。 – 2012-03-13 20:45:32

0

我只是將代碼粘貼片,其單獨排除週末。請使用這個根據你的目的

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

你的意思是什麼 - > Date temp = date1; – zairahCS 2012-03-13 21:02:32

+0

這是您從txtStart右側分配的原始startDate。我不想更改該實例,因此我已將其分配給臨時變量。 – raddykrish 2012-03-13 21:03:45

+0

。我已經完成了你的代碼,但是當我運行它時,當我嘗試在txtStart中輸入日期的最後一個數字時,UI排序掛起。 – zairahCS 2012-03-13 21:13:35

相關問題