小编典典

java.time.format.DateTimeParseException:无法在索引 3 处解析文本“11 2 AM”

all

我想以 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);
}

阅读 65

收藏
2022-07-13

共1个答案

小编典典

如果您想解析一天中的某个时间,您将需要 a java.time.LocalTime而不是a LocalDate

与 old 和 outdated 相比java.util.Date,aLocalDate表示由月中的日、年中的月和年组成的日期。

您正在尝试解析一天中的某个时间,该模式甚至可能适用于它,但您无法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
2022-07-13