gpt4 book ai didi

java - 如何解析HH :mm into amount of minutes considering locale time separator?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:54 24 4
gpt4 key购买 nike

我有一个“HH:mm”格式的输入字符串,其中时间分隔符根据区域设置(例如,美国为“10:45”,意大利为“10.45”)。我需要将其转换为分钟数。

这是我想出的:

String timeSeparator = getTimeSeparator(locale);
String[] duration = durationString.split(Pattern.quote(timeSeparator));
int minutes = Integer.valueOf(duration[0])*60 + Integer.valueOf(duration[1]);

getTimeSeparator 方法取自 https://stackoverflow.com/a/7612009/7753225

有没有更简单的方法?例如使用 `java.time'。

最佳答案

tl;dr

Duration.parse( 
"PT" +
"10:45".replace( ":" , "M" )
.replace( "-" , "M" )
.replace( "." , "M" )
.replace( "," , "M" )
+ "S"
).toMinutes()

"10:45" → PT10M45S → 10

ISO 8601 格式

ISO 8601标准为未附加到时间线的此类时间跨度定义了一种格式:PnYnMnDTnHnMnS

P 标记开始。 T 将任何年-月-日与小时-分钟-秒分开。所以一个半小时是 PT1H30M。您的十分钟四十五秒示例是 PT10M45S

执行简单的字符串操作将您的输入转换为这种格式。

String input = "10:45" ;
String inputStandardized = "PT" +
input.replace( ":" , "M" )
.replace( "-" , "M" )
.replace( "." , "M" )
.replace( "," , "M" )
+ "S" ;

PT10M45S

持续时间

解析为 Duration . java.time 类使用 ISO 8601解析和生成字符串时默认格式。因此无需指定格式化模式。

Duration duration = Duration.parse( inputStandardized );

duration.toString(): PT10M45S

您可以使用 Duration 对象进行日期时间数学运算,传递给 plusminus。因此,您可能不需要将分钟数作为整数。但是您可以询问持续时间的总分钟数。

long minutes = duration.toMinutes();

10

查看此 code run live at IdeOne.com .

提示:在一段时间内使用时钟时间格式是自找麻烦。歧义导致困惑和错误。我建议对持续时间使用标准 ISO 8601 格式,因为它们旨在明确、易于阅读和解析。

关于java - 如何解析HH :mm into amount of minutes considering locale time separator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42983908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com