有人可以帮助我从上个月的第一天和最后一天找到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();
但不知道如何创建上个月的第一个和最后一个。 提前谢谢
答案 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)
这些不是你提出的要点,但我相信它们对你来说仍然是有用的建议。
LocalDate.now()
以确保一致性。YYYY
。半开:很自然地将一个月的日期视为从月的第一天到该月的最后一天包含。但是,标准处理将从本月的第一天包含到下个月的第一个独占。它仍然是同一天,只是一个不同的代表。特别是当您连续几个月处理时,这可以简化并防止错误:当您拥有本月的第一个月时,您也不需要上个月的最后一个月。而且你不可能错误地在两个时期之间留下差距。
只读一次今天的日期。如果您的代码恰好在午夜运行,您可能会接受无法控制是否使用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
。