日期选择器前一天的第一天和最后一天
Date picker first and last day of previous
谁能帮我从日期选择器中找到上个月的第一天和最后一天。
实现了当前日期和当月 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();
但不知道如何创建上个月的第一天和最后一个月。
提前谢谢你
已解决,经过一些谷歌搜索和检查:
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"));
这些要点不是你问的,但相信对你还是有帮助的建议。
- 考虑半开区间。
- 为了保持一致性,只阅读
LocalDate.now()
一次。
- 给出你想要的时区。
- 不要在格式模式字符串中使用大写
YYYY
。
半开:很自然地认为一个月的天数是从第一天到最后一天包括。但是,标准处理将从本月的第一天 inclusive 到下个月的第一天 exclusive。还是一样的日子,只是表现形式不同。特别是当你处理连续的月份时,这提供了简单性并防止了错误:当你有这个月的第一天时,你不需要上个月的最后一个。而且你不可能错误地在两个时期之间划出一个空白。
只读一次今天的日期。如果您的代码恰好在 运行 午夜时分,您可以接受您无法控制它是否使用 [=] 之前的日期67=] 或之后的日期,但您要确保它不会同时用于不同的日期计算,否则您可能会面临日期不一致的风险,例如属于同一个月而不是上个月和本月的所有日期。
给一个时区:地球上所有时区的日期永远不会相同。因此,需要一个时区来确定今天的日期或当前月份。明确说明。即使你想要 ZoneId.systemDefault()
,写下它来强迫自己做出有意识的决定,并告诉 reader 你已经这样做了。
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
个对象或其中的 none 个来处理本月和上个月。但我会向您展示这两种选择,以便您做出选择。如果您想要当前月份,请使用 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
.
谁能帮我从日期选择器中找到上个月的第一天和最后一天。 实现了当前日期和当月 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();
但不知道如何创建上个月的第一天和最后一个月。 提前谢谢你
已解决,经过一些谷歌搜索和检查:
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"));
这些要点不是你问的,但相信对你还是有帮助的建议。
- 考虑半开区间。
- 为了保持一致性,只阅读
LocalDate.now()
一次。 - 给出你想要的时区。
- 不要在格式模式字符串中使用大写
YYYY
。
半开:很自然地认为一个月的天数是从第一天到最后一天包括。但是,标准处理将从本月的第一天 inclusive 到下个月的第一天 exclusive。还是一样的日子,只是表现形式不同。特别是当你处理连续的月份时,这提供了简单性并防止了错误:当你有这个月的第一天时,你不需要上个月的最后一个。而且你不可能错误地在两个时期之间划出一个空白。
只读一次今天的日期。如果您的代码恰好在 运行 午夜时分,您可以接受您无法控制它是否使用 [=] 之前的日期67=] 或之后的日期,但您要确保它不会同时用于不同的日期计算,否则您可能会面临日期不一致的风险,例如属于同一个月而不是上个月和本月的所有日期。
给一个时区:地球上所有时区的日期永远不会相同。因此,需要一个时区来确定今天的日期或当前月份。明确说明。即使你想要 ZoneId.systemDefault()
,写下它来强迫自己做出有意识的决定,并告诉 reader 你已经这样做了。
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
个对象或其中的 none 个来处理本月和上个月。但我会向您展示这两种选择,以便您做出选择。如果您想要当前月份,请使用 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
.