Я действительно не знаю Joda-Time, но у меня есть предположение, которое звучит компетентно в моих собственных ушах.Я попробовал это:
DateTimeFormatter dateTimeFormatter
= DateTimeFormat.longTime().withLocale(Locale.US);
String timeString = DateTime.now().toString(dateTimeFormatter);
System.out.println("timeString: \"" + timeString + '"');
На моем компьютере в часовом поясе Европы / Копенгагена он только что напечатал:
timeString: "3:19:09 PM CEST"
Так что, похоже, DateTimeFormat.longTime()
включает сокращение часового пояса (здесь CEST для Центрально-Европейского Летнего времени).Очевидно, что в вашем коде происходит следующее:
- Поскольку
LocalTime
не включает часовой пояс, его метод toString
форматирует время с пустой строкой как сокращение часового пояса.Он включает в себя пространство между временем и тем, где должно быть сокращение часового пояса.В исключении, которое вы цитируете (а также когда я воспроизводю его здесь), после PM
. LocalTime.parse
есть пробел, более строгий и возражающий против отсутствия аббревиатуры часового пояса в строке.