Георгиос:
Из следующей строки, я хочу, чтобы получить LocalDate или LocalDateTime.
1 января 2019 12:00:00 AM
Я уже пробовал следующий код, но я получаю следующее сообщение об ошибке:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM d, yyyy hh:mm:ss a"); // also with dd
formatter = formatter.withLocale(Locale.GERMAN);
LocalDateTime localDateTime = LocalDateTime.parse(stringDate, formatter);
LocalDate localDate = LocalDate.parse(stringDate, formatter);
Exception in thread "main" java.time.format.DateTimeParseException: Text 'Jan 1, 2019 12:00:00 AM' could not be parsed at index 0
То, как я хотел бы иметь дату, в конце концов, будет как
- 01/01/2019. LOCALDATE
- 01/01/2019. 12:00 localdateti в (24h)
Является ли это вообще возможно? Будет вместо использования регулярных выражений излишества?
Томас Pötzsch:
Есть несколько проблем с вашим кодом, но я предложу рабочее решение здесь:
HH
Настал час в день, а не час 0-12 (чтоhh
)- Вы должны использовать DateTimeFormatterBuilder
- Вы должны использовать правильную локаль, вероятно ,
GERMANY
вместоGERMAN
- название месяца представляется в виде
L
, а не какM
- немецкий локали использует
vorm.
иnachm.
вместоAM
иPM
-> быстрое решение заменить термины
Собираем все вместе оставляет нас с этим:
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Locale;
class Scratch {
public static void main(String[] args) {
String stringDate = "Jan 1, 2019 11:00:00 PM";
stringDate = stringDate.replace("AM", "vorm.");
stringDate = stringDate.replace("PM", "nachm.");
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("LLL d, yyyy hh:mm:ss a")
.toFormatter(Locale.GERMANY);
LocalDateTime localDateTime = LocalDateTime.parse(stringDate, formatter);
LocalDate localDate = LocalDate.parse(stringDate, formatter);
}
}
Если кто -то имеет другой подход к обработке AM
/ vorm.
-dilemma, я был бы рад видеть его!