java .time
Вы после чего-то вроде этого?
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MM/dd/uu");
String dateFromWebPage = "10/21/19";
String expected = LocalDate.now(ZoneId.systemDefault())
.minusMonths(3)
.format(dateFormatter);
if (dateFromWebPage.equals(expected)) {
System.out.println("They agree");
} else {
System.out.println("They do not agree");
}
Когда я только что запустил этот код, вывод был:
Они согласны
Имейте в виду, что:
- Если между веб-страницей и временем запуска теста проходит полночь, дата больше не совпадает.
- Если веб-сервер и ваш компьютер используют разные часовые пояса, дата, вероятно, не всегда будет совпадать.
- В худшем случае «3 месяца назад» не всегда четко определены. Что такое 3 месяца назад с 31 мая? Это не может быть 31 февраля, потому что в феврале всего 28 или 29 дней.
Полагаю, что в результате пуленепробиваемого теста будет получено от 1 до 3, 4 или 5 дат, которые были бы приемлемы, принимая Эти пункты учитываются и будут удовлетворены, если только один из них был фактически напечатан на веб-странице Например:
// Assume that the web page has been generated within the last hour
LocalDate earliestExpected = OffsetDateTime.now(ZoneOffset.MIN)
.minusHours(1)
.toLocalDate()
.minusMonths(3);
LocalDate latestExpected = LocalDate.now(ZoneOffset.MAX)
.minusMonths(3);
System.out.println("Expected interval: " + earliestExpected + " - " + latestExpected);
LocalDate actual = LocalDate.parse(dateFromWebPage, dateFormatter);
if (actual.isBefore(earliestExpected) || actual.isAfter(latestExpected)) {
System.out.println("They do not agree");
} else {
System.out.println("They agree");
}
Когда я только что запустил этот фрагмент (утром 22 января в моем часовом поясе), получилось:
Expected interval: 2019-10-21 - 2019-10-22
They agree
Если мы запускаем его в середине дня UT C 1 марта в не високосный год, ожидаемый интервал дат может включать 28, 29 и 30 ноября и 1 и 2 декабря (все в предыдущем году), поскольку в то время на Земле будут места, где еще 28 февраля, и другие места, где уже 2 марта. Если мы проведем его около полуночи с 31 мая по 1 июня, ожидаемый интервал будет включать только 28 февраля и 1 марта. потому что java .time определяет 3 месяца назад с 31 мая как последний день февраля.
Ссылка: Oracle учебник: Дата и время , объясняя, как использовать java .time.