2012-03-13 7 views
0

私は入力した日付に102日を追加できますが、問題は102 日(週末を除く)にする必要があります。どうやってやるの?以下について指定日からX日の曜日を計算するにはどうすればよいですか?

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

+0

それは102日の満了でなければなりませんが、週末は数えられません – zairahCS

答えて

0

を使用してくださいこれは、日付に(週末は無視されます)weekdays平日追加する必要があります。 weekdays0を渡すと、翌営業日になります。したがって、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(); 
} 

EDIT:あなたのコードで

、単に次のように置き換えます。

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

方法:ここで

はちょうど102日を追加するための私のコードですか?

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

+0

@JMK、あなたの解決策はC#です。質問はJavaに関するものです。 –

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

+0

これはtxtStartの権利から割り当てたオリジナルの開始日です。私はそのインスタンスを変更して一時変数に代入したくない。 – raddykrish

+0

。私はあなたのコードを行ったが、私はそれを実行するとき、私はtxtStartの日付の最後の数字を入力しようとするとハングアップのUIの並べ替え。 – zairahCS

関連する問題