String.replaceFirst () и java .time через ThreeTenABP
Есть несколько различных способов go об этом. Я представляю своего рода смешанный подход: я использую регулярное выражение для различных возможных разделителей, который проверяет, что оба разделителя (после дня и после месяца) одинаковы. Далее я использую необязательные части в строке шаблона формата для обработки месяца как сокращения (Jan
) или числа (01
).
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd-[MMM][MM]-uuuu", Locale.ENGLISH);
String[] inputs = { "02/01/2020", "04-01-2020", "07 01 2020",
"09 Jan 2020", "13-Jan-2020", "17/Jan/2020" };
for (String input : inputs) {
String withHyphens = input.replaceFirst("([/ ])(.*)\\1", "-$2-");
LocalDate date = LocalDate.parse(withHyphens, dateFormatter);
System.out.format("%11s was parsed into %s%n", input, date);
}
Выходные данные этого фрагмента:
02/01/2020 was parsed into 2020-01-02
04-01-2020 was parsed into 2020-01-04
07 01 2020 was parsed into 2020-01-07
09 Jan 2020 was parsed into 2020-01-09
13-Jan-2020 was parsed into 2020-01-13
17/Jan/2020 was parsed into 2020-01-17
Если вы предпочитаете, вы также можете использовать дополнительные части в строке шаблона формата для всего. Тогда ваш шаблон формата может выглядеть как dd[/][-][ ][MMM][MM][/][-][ ]uuuu
. Это дает более мягкую проверку, но более согласованно и короче.
Я использую бэкпорт java .time, современный Java API даты и времени.
Вопрос: 't java .time требует Android API уровня 26?
java .time прекрасно работает как на старых, так и на новых Android устройствах. Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях и на более новых Android устройствах (от уровня API 26) современный встроенный API -in.
- В не- Android Java 6 и 7 получите ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. ссылки внизу).
- Вкл. (Старше) Android используйте редакцию ThreeTen Backport Android. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки