我想以 hh:mm:a 格式解析时间。但是当我以 hha 格式传递字符串时,它会在索引 3 处给出错误 java.time.format.DateTimeParseException: 例如:- 当我像上午 11:15 这样传递字符串时,一切都很好。但是当我在上午 11:2 传递字符串时。它说无法在索引 3 处解析文本“11 2 AM”。
这是我的java代码: -
String time = result.get(0); time = time.replace("a.m", "AM"); time = time.replace("p.m", "PM"); time = time.substring(0, time.length() - 1); mTimebtn.setText(time); if (time.contains("AM")) { DateTimeFormatter dtfParse1 = DateTimeFormatter.ofPattern("hh m a", Locale.ENGLISH); // a second one to be used in order to format the desired result DateTimeFormatter dtfFormat1 = DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH); LocalDate localDate1 = LocalDate.parse(time, mTimebtn.setText(localDate1.format(dtfFormat1)); finaltime = localDate1.format(dtfFormat1); }
如果您想解析一天中的某个时间,您将需要 a java.time.LocalTime,而不是a LocalDate。
java.time.LocalTime
LocalDate
与 old 和 outdated 相比java.util.Date,aLocalDate表示由月中的日、年中的月和年组成的日期。
java.util.Date
您正在尝试解析一天中的某个时间,该模式甚至可能适用于它,但您无法LocalDate从有关一天中的小时、小时的分钟和 AM/PM 的信息中创建一个。那是行不通的……
以下代码可能对您有用:
public static void main(String[] args) { // your example input String String someTime = "11 2 AM"; // one dtf for parsing input DateTimeFormatter timeParser = DateTimeFormatter .ofPattern("K m a", Locale.ENGLISH); // another one for formatting as desired DateTimeFormatter timeFormatter = DateTimeFormatter .ofPattern("KK:mm a", Locale.ENGLISH); // parse using the parser LocalTime localTime = LocalTime.parse(someTime, timeParser); // print using the formatter System.out.println(localTime.format(timeFormatter)); }
输出:
11:02 AM