将字符串时间转换为本地时间以进行比较

Convert a String time to a localtime to compare

我正在尝试计算数学以验证轮班是否正确休息,当我查询 api 时,我得到以下响应:

    "StartDate": "4/25/2018",
    "EndTime": "8:30PM",
    "StartDayNumber": 1,
    "StartTime": "7:30PM",
    "SegmentTypeName": "BREAK",
    "EndDate": "4/25/2018",
    "EndDayNumber": 1

我尝试了各种使用 LocalTime 的尝试,所以我可以使用函数 Duration:

LocalTime start = LocalTime.parse(employeeShift.getJSONObject(ii).get("StartTime").toString(), DateTimeFormatter.ofPattern("HH:mm a"));
LocalTime end = LocalTime.parse(employeeShift.getJSONObject(ii).get("EndTime").toString());

我尝试了多种方法将 EndTime 和 StartTime 转换为本地时间。但是我很困惑,我尝试了多种格式化程序,包括日期、小时,但我没有找到包含 am/pm 的示例,我是否需要先转换为 24 小时制?

我遇到的错误:

java.time.format.DateTimeParseException: Text '1:00PM' could not be parsed at index 0

您只需要修复您的 DateTimeFormatter。 "HH" 是一天中的小时(值从 0 到 23)。要解析 AM/PM 小时,您需要使用 "hh"(am/pm 的时钟小时,值从 1 到 12 - check the javadoc)。此外,分钟和 AM/PM 部分之间没有 space,要解析一位数小时,您可以只使用一个 "h"(它会接受一位或两位数,这似乎匹配您的输入):

LocalTime.parse("7:30PM", DateTimeFormatter.ofPattern("h:mma", Locale.US));

我还使用了 java.util.Locale 因为 AM/PM 字符串是本地化的,如果我不指定一个,将使用 JVM 默认值 - 尽管对于大多数语言环境 "AM" 和"PM" 被使用,还有其他语言产生类似 "a.m." 或其他字符串的东西。