日期选择器的前一天和前一天

时间:2018-02-07 07:46:38

标签: java selenium-webdriver localdate java-date

有人可以帮助我从上个月的第一天和最后一天找到datepicker。 达到当前日期和当月的第1天,具有以下内容:

// Choose today's date
    String today =  LocalDate.now().format(DateTimeFormatter.ofPattern("dd/MM-YYYY"));
    driver.findElement(By.xpath("//*[@id=\"viewPeriodStart\"]")).clear();
    driver.findElement(By.xpath("//*[@id=\"viewPeriodStart\"]")).sendKeys(today);
    //Choose first of a month
    String firstDayinMOnth = LocalDate.now().format(DateTimeFormatter.ofPattern("01/MM-YYYY"));
    driver.findElement(By.xpath("//*[@id=\"viewPeriodEnd\"]")).clear();
    driver.findElement(By.xpath("//*[@id=\"viewPeriodEnd\"]")).sendKeys(firstDayinMOnth + Keys.ENTER);
    Thread.sleep(8000);
    driver.findElement(By.xpath("//*[@id=\"calenderShowHide\"]/div/input[3]")).click();

但不知道如何创建上个月的第一个和最后一个。 提前谢谢

2 个答案:

答案 0 :(得分:2)

经过一段谷歌搜索和解决之后解决了检查:

String lastDay = LocalDate.now().withDayOfMonth(1).minusDays(1).format(DateTimeFormatter.ofPattern("dd/MM-YYYY"));
String firstDay = LocalDate.now().withDayOfMonth(1).minusDays(1).withDayOfMonth(1).format(DateTimeFormatter.ofPattern("dd/MM-YYYY"));

答案 1 :(得分:1)

这些不是你提出的要点,但我相信它们对你来说仍然是有用的建议。

  1. 考虑半开间隔。
  2. 只读一次LocalDate.now()以确保一致性。
  3. 提供您想要的时区。
  4. 请勿在格式模式字符串中使用大写YYYY
  5. 半开:很自然地将一个月的日期视为从月的第一天到该月的最后一天包含。但是,标准处理将从本月的第一天包含到下个月的第一个独占。它仍然是同一天,只是一个不同的代表。特别是当您连续几个月处理时,这可以简化并防止错误:当您拥有本月的第一个月时,您也不需要上个月的最后一个月。而且你不可能错误地在两个时期之间留下差距。

    只读一次今天的日期。如果您的代码恰好在午夜运行,您可能会接受无法控制是否使用0:00之前或之后的日期,但您想要确保它不会同时用于不同的日期计算,或者您存在不一致的日期,例如属于同一个月而不是上个月和本月的所有日期。

    提供时区:地球上所有时区的日期永远不会相同。因此,需要一个时区来确定今天的日期或当前月份。明确说明。即使你想要ZoneId.systemDefault(),写下来强迫自己做出有意识的决定并告诉读者你已经这样做了。

        LocalDate today = LocalDate.now(ZoneId.of("Europe/Belgrade"));
        LocalDate firstDayOfCurrentMonth = today.withDayOfMonth(1);
        LocalDate lastDayOfCurrentMonth = today.with(TemporalAdjusters.lastDayOfMonth());
        YearMonth lastMonth = YearMonth.of(today.getYear(), today.getMonth())
                                .minusMonths(1);
        LocalDate firstDayOfLastMonth = lastMonth.atDay(1);
        LocalDate lastDayOfLastMonth = lastMonth.atEndOfMonth();
    

    YearMonth是日历中的一个月,例如 1940年4月 2018年2月。一年零一个月。我故意在代码中有点不一致。在生产代码中,您可能希望通过YearMonth对象或上个月来处理这个和上个月。但是我向你展示了两种选择,所以你可以选择。如果您想要当前月份,请使用YearMonth.now(ZoneId)

    最后一点:格式模式字符串中的YYYY。这是格式化程序的正确版本:

        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/MM-uuuu");
    

    如果不是今天我将在明年1月份运行我的代码并使用带有大写YYYY的格式化程序,我将上个月作为01 / 12-2018到31 / 12-2019。应该是31 / 12- 2018 ,但该日期属于2019年的第1周,这是YYYY给你的。而是使用uuuu或小写yyyy