Java 如何计算从给定日期算起的X周天数的日期?
我可以将102天添加到我输入的任何日期,但现在的问题是,不包括周末,它应该是102周。我该怎么做 以下是我仅添加102天的代码: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
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);
}
}