Java 从月日减去x天

Java 从月日减去x天,java,selenium,dayofmonth,Java,Selenium,Dayofmonth,我有一个日期,它的形式是21,23,24,25 我想要的是从当月的当天减去4天 下面报告了我的尝试,但它以dd/mm/yyyy的形式给出了日期。我只想要一天 Calendar cal=Calendar.getInstance(); cal.add(Calendar.DAY_OF_MONTH, -4); Date curdteMinusFourDays=cal.getTime(); String curdteMinusFourDaysStr=curdteMinusFourDays.toString

我有一个日期,它的形式是21,23,24,25

我想要的是从当月的当天减去4天

下面报告了我的尝试,但它以
dd/mm/yyyy
的形式给出了日期。我只想要一天

Calendar cal=Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, -4);
Date curdteMinusFourDays=cal.getTime();
String curdteMinusFourDaysStr=curdteMinusFourDays.toString();
System.out.println(curdteMinusFourDays);

tripDate.click();

List<WebElement> listofdates=CommonBrowserSetup.driver.findElements(By.tagName("td"));
for (int i=1;i<=listofdates.size();i++){
    System.out.println(listofdates.get(i).getText());
    String d1=listofdates.get(i).getText();
    if(d1.contains(curdteMinusFourDaysStr)){
        listofdates.get(i).click();
        break;
    }
}
Calendar cal=Calendar.getInstance();
cal.add(日历日/月日,-4);
Date curdteMinusFourDays=cal.getTime();
字符串curdteminusfourdaystr=curdteMinusFourDays.toString();
System.out.println(curdteminus四天);
tripDate.click();
List listofdates=CommonBrowserSetup.driver.findElements(按.tagName(“td”));
对于(inti=1;i你应该这样做

System.out.println(calendar.get(calendar.DAY/u/u MONTH));//减去后


有关更多变化,请查看

尝试下面的代码,它将以月日的形式给出结果

如果今天的日期是30,那么下面的代码将输出为26

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, -4);
System.out.println(cal.get(Calendar.DAY_OF_MONTH));

如果有帮助,请告诉我。

只需将当月的当天作为整数。然后减去4。如果结果为负数,则应将上月的天数相加

import java.util.Calendar;

public class Main2 {

public static void main(String args[])
{


    Main2 m = new Main2();
    Calendar cal = Calendar.getInstance();
    int result;
    cal.set(Calendar.MONTH, Calendar.DECEMBER);
    cal.set(Calendar.DAY_OF_MONTH, 11);
    result = m.substractFromCurrentDay(cal, 4);
    System.out.println(result);//prints 7
    cal.set(Calendar.DAY_OF_MONTH, 1);
    result = m.substractFromCurrentDay(cal, 4);
    System.out.println(result);//prints 27
}

public int substractFromCurrentDay(Calendar cal, int daysToSubstract)
{
    int currentDay = cal.get(Calendar.DAY_OF_MONTH);
    int result;

    result=currentDay-daysToSubstract;
    if(result<=0)
    {
        cal.add(Calendar.MONTH, -1);//go to last month
        int lastMonthDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        result=result+lastMonthDays;
    }

    return result;
}
}
import java.util.Calendar;
公共类Main2{
公共静态void main(字符串参数[])
{
Main2 m=新的Main2();
Calendar cal=Calendar.getInstance();
int结果;
校准设置(日历月、日历月、日历月);
校准设置(日历日/月/日,11);
结果=从当前日期减去m(校准,4);
System.out.println(结果);//打印7
校准设置(日历日/月/日,1);
结果=从当前日期减去m(校准,4);
System.out.println(结果);//打印27
}
public int substractfrom currentday(日历校准,int days to substract)
{
int currentDay=cal.get(日历日/月);
int结果;
结果=当前日期减记;

如果(结果)消息

  • 不要为此使用过时的
    Calendar
    类。使用
    java.time
    ,即现代的java日期和时间API
  • 有意识地选择时区并使其明确
详细信息

将四天前的月日作为字符串获取的镀金方式是使用格式化程序:

    DateTimeFormatter dayOfMonthFormatter = DateTimeFormatter.ofPattern("d");
    String day = LocalDate.now(ZoneId.of("America/Winnipeg"))
            .minusDays(4)
            .format(dayOfMonthFormatter);
    System.out.println(day);
今天(12月19日)运行此命令,它将打印
15

我使用的格式模式字符串为
d
。这将为您提供字符串1、2、3等。如果您需要01、02、03,请使用
dd
获取月份的两位数天数,并根据需要前导零

由于获取今天的日期是一个时区敏感的操作,请确定您想要的时区,并在代码中明确显示。换句话说,如果您想要的时区不是America/Winnipeg,请替换它

如果您不需要任何格式(如前导零),也可以不使用格式设置程序完成更简单的操作:

不过,熟悉
DateTimeFormatter
可能是一项不错的投资

java.time


Calendar
类非常古老且过时,
Date
更是如此。
java.time
,现代java日期和时间API(也称为JSR-310),使用起来非常方便。

单击日期后,使用
.getAttribute(“值”)
那么只有你才能获得
日期
而不是
日期
。有关此问题的更多详细信息,请参阅此答案。
日历
类非常古老且过时,
日期
更是如此。您仍然使用它们的任何特定原因都更适合使用。现在使用
LocalDate.now(ZoneId.of(“America/Winnipeg”)).minusDays(4.getDayOfMonth()
.An旁白,使用
d1.contains()
,你不是在冒误报的风险吗?如果4天前是第二天,那么你的情况也会持续12天、20天等等。除了使用过时的
日历
课程之外,你不是把事情复杂化了吗?你的答案完成了其他答案没有完成的事情吗?
    int dayInt = LocalDate.now(ZoneId.of("America/Winnipeg"))
            .minusDays(4)
            .getDayOfMonth();
    String day = String.valueOf(dayInt);