0

我有一个以 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;
    }
}
4

4 回答 4

1

留言

  • 不要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根据需要使用前导零来获取两位数的月份日期。

由于获取今天的日期是对时区敏感的操作,因此请确定您想要的时区,并在您的代码中明确说明。换句话说,如果它不是美国/温尼伯,请替换您想要的时区。

如果您不需要任何格式(如前导零),也可以在没有格式化程序的情况下完成更多准系统:

    int dayInt = LocalDate.now(ZoneId.of("America/Winnipeg"))
            .minusDays(4)
            .getDayOfMonth();
    String day = String.valueOf(dayInt);

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

java.time

Calendar门课非常古老,早已过时,Date更是如此。java.time,现代 Java 日期和时间 API,也称为 JSR-310,使用起来非常好用。

于 2017-12-19T15:04:57.727 回答
0

只需将当前日期作为 int 获取。然后减去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;
}
}
于 2017-12-19T09:29:22.613 回答
0

试试下面的代码,它会以月份的形式给出结果

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

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

让我知道它是否对您有帮助。

于 2017-03-30T10:16:14.230 回答
0

你应该做

System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); //after you have subtracted

有关更多变化,请查看https://stackoverflow.com/a/7226186/2551236

于 2017-03-30T09:23:15.757 回答