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

时间:2018-04-25 22:29:49

标签: java datetime java-time datetime-parsing

我正在试图找出数学来验证班次是否得到正确的休息,当我查询api时,我得到以下回复:

If TimeValue(Worksheets("Individual_Stats").Cells(2, 14)) > TimeValue(Worksheets("PRT_Scores").Cells(3, 12)) Then
Range("A1").Interior.ColorIndex = 5
End If

我尝试过使用 "StartDate": "4/25/2018", "EndTime": "8:30PM", "StartDayNumber": 1, "StartTime": "7:30PM", "SegmentTypeName": "BREAK", "EndDate": "4/25/2018", "EndDayNumber": 1 的各种尝试,因此我可以使用函数LocalTime

Duration

我尝试过将EndTime和StartTime转换为本地时间的各种方法。但是我很难过我已经尝试过各种格式化程序,包括当天,小时但是我还没有找到包含上午/下午的示例,我是否需要先转换为24小时?

我得到的错误:

  

java.time.format.DateTimeParseException:无法在索引0处解析文本“1:00 PM”

1 个答案:

答案 0 :(得分:2)

您只需修复DateTimeFormatter即可。 “HH”是小时(0到23之间的值)。要解析上午/下午时间,您需要使用“hh”(上午/下午的时钟,1到12之间的值 - check the javadoc)。此外,分钟和AM / PM部分之间没有空格,要解析一个数字小时,您只能使用一个“h”(它将接受一个或两个数字,这似乎与您的输入相匹配):

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

我还使用了java.util.Locale,因为AM / PM字符串已本地化,如果我没有指定,则会使用JVM默认值 - 尽管对于大多数语言环境使用“AM”和“PM”,还有其他语言可以产生“am”之类的东西或其他一些字符串。