如何计算距给定日期X个星期几的日期?
我能够在我输入的任何日期添加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);
}
}
这应该添加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);
}
}
怎么样以下?
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);
}
}
编辑:更新了自定义日期
这是使用当前日期吗? – zairahCS 2012-03-13 20:37:26
@JMK,你的解决方案是在C#中。问题是关于Java。 – 2012-03-13 20:45:32
我只是将代码粘贴片,其单独排除周末。请使用这个根据你的目的
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());
}
你的意思是什么 - > Date temp = date1; – zairahCS 2012-03-13 21:02:32
这是您从txtStart右侧分配的原始startDate。我不想更改该实例,因此我已将其分配给临时变量。 – raddykrish 2012-03-13 21:03:45
。我已经完成了你的代码,但是当我运行它时,当我尝试在txtStart中输入日期的最后一个数字时,UI排序挂起。 – zairahCS 2012-03-13 21:13:35
,我没有得到你的问题。你想包括周末吗?不包括周末的 – raddykrish 2012-03-13 20:33:23
。它应该是102天到期,但是周末不应该计算在内 – zairahCS 2012-03-13 20:35:42