- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个格式如下的字符串:“2h 33m 50s”。如果小时数达到零,则该字符串将更改为:“33m 50s”。因此,如果该字符串经过 LocalTime.parse ,则会抛出异常。我该如何解析它?
fun main() {
val timeString = "2h 33m 50s"
val timeString2 = "33m 50s"
val formatterH = DateTimeFormatter.ofPattern("[H]'h 'm[m]'m 's[s]'s'")
val formatterM = DateTimeFormatter.ofPattern("m[m]'m 's[s]'s'")
val time = LocalTime.parse(timeString, formatterH)
println(time)
val time2 = LocalTime.parse(timeString2, formatterH) //throws exception
println(time2)
val time3 = LocalTime.parse(timeString2, formatterM) //throws similar exception
println(time3)
}
Program output:
02:33:50
Exception in thread "main" org.threeten.bp.format.DateTimeParseException: Text '33m 50s' could not be parsed: Unable to obtain LocalTime from TemporalAccessor: DateTimeBuilder[fields={SecondOfMinute=50, NanoOfSecond=0, MicroOfSecond=0, MinuteOfHour=33, MilliOfSecond=0}, ISO, null, null, null], type org.threeten.bp.format.DateTimeBuilder
at org.threeten.bp.format.DateTimeFormatter.createError(DateTimeFormatter.java:1559)
at org.threeten.bp.format.DateTimeFormatter.parse(DateTimeFormatter.java:1496)
at org.threeten.bp.LocalTime.parse(LocalTime.java:437)
at MainKt.main(main.kt:16)
at MainKt.main(main.kt)
Caused by: org.threeten.bp.DateTimeException: Unable to obtain LocalTime from TemporalAccessor: DateTimeBuilder[fields={SecondOfMinute=50, NanoOfSecond=0, MicroOfSecond=0, MinuteOfHour=33, MilliOfSecond=0}, ISO, null, null, null], type org.threeten.bp.format.DateTimeBuilder
at org.threeten.bp.LocalTime.from(LocalTime.java:405)
at org.threeten.bp.LocalTime$1.queryFrom(LocalTime.java:116)
at org.threeten.bp.LocalTime$1.queryFrom(LocalTime.java:113)
at org.threeten.bp.format.DateTimeBuilder.build(DateTimeBuilder.java:642)
at org.threeten.bp.format.DateTimeFormatter.parse(DateTimeFormatter.java:1492)
最佳答案
你工作太努力了,而且方向错误。
正则表达式对于这个问题来说太过分了。
不需要 DateTimeFormatter
类,也不是格式化模式。
使用Duration
解析 ISO 8601 的类根据您的输入制作的字符串。
Duration // Represent a span-of-time not attached to the timeline with class `Duration`, not `LocalTime`.
.parse( // By default, the *java.time* classes such as `Duration` use the standard ISO 8601 formats to parse/generate date-time strings.
"PT" + "2h 33m 50s" // Morph your input string to comply with the ISO 8601 standard. Add `P` for the beginning, and `T` to separate years-months-days from hours-minutes-seconds.
.replace( " " , "" ) // Delete any SPACE characters by replacing them with nothing.
.toUpperCase() // Force all the letters to be uppercase.
) // Returns a `Duration`.
同样的几分钟和几秒钟。
Duration.parse( "PT" + "33m 50s".replace( " " , "" ).toUpperCase() )
持续时间
,而不是LocalTime
if this string goes through LocalTime.parse
LocalTime
是一天中的某个时间。您的输入不是一天中的时间。
您的输入字符串代表未附加到时间线的时间跨度。其类别是 Duration
.
您的输入字符串接近 standard ISO 8601格式,PnYnMnDTnHnMnS
。 P
标志着开始。 T
将任何年-月-日与任何时-分-秒分开。
让我们调整您的输入字符串以符合标准。
String input = "PT" + "2h 33m 50s".replace( " " , "" ).toUpperCase() ;
input: PT2H33M50S
解析。
Duration d = Duration.parse( input ) ; // PT2H33M50S
要生成标准 ISO 8601 格式的字符串,请调用 toString
。
String output = d.toString() ;
output: PT2H33M50S
您可以将该 Duration
对象添加到一天中的某个时间,即 LocalTime
。
LocalTime lt = LocalTime.NOON.plus( d ) ;
您可以将该持续时间
添加到 UTC 中的当前时刻,以确定 future 的时刻(或者过去的时刻是持续时间为负值的时刻)。
Instant instant = Instant.now().plus( d ) ;
lt.toString(): 14:33:50
查看以上所有内容code run live at IdeOne.com .
您可以提取持续时间
的每个部分。
long daysPart = d.toDaysPart() ; // 24-hour chunks of time, not related to calendar days.
int hoursPart = d.toHoursPart() ;
int minutesPart = d.toMinutesPart() ;
int secondsPart = d.toSecondsPart() ;
或者您可能希望将整个时间跨度作为总毫秒数。
long millis = d.toMillis() ; // All the hours-minutes-seconds and such totaled as one count of elapsed milliseconds.
关于java - 如何解析HH :mm:ss without hours?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56158486/
如标题所示,我有一个问题。我需要将 LocalDataTime yyyy-MM-ssThh-mm-ss 解析为 LocalDataTime yyyy-MM-ss hh-mm-ss 但是当我这样做时 S
我使用“cin”从输入流中读取单词,比如 int main( ){ string word; while (cin >> word){ //do sth on t
我有一个 Java 函数可以将秒数转换为特定格式 (hh:mm:ss): public static String formatChronometer(long seconds) { retu
(学习C++)我一直在看下面的代码部分: stringstream ss; // more code ss.clear(); ss.str(""); 为什么 ss.str(""); 调用时 ss.cl
我有一个从 GPS 跟踪器收集的数据集。数据中的总时间应为 mm:ss。但 Excel 将其解释为小时和分钟。 如何使用公式将其转换为分钟和秒?在下面的示例中,32 应该是 32 分钟,15 应该是
我的时间格式如下 public static final String TIME_FORMAT = "HH:mm:ss.SS"; edition.getEditionDate().format(T
我正在尝试对以下示例进行转换: 原始时间:1:03.091 转换时间:63.09 我做了一些研究,发现我可以将分钟添加到秒,但不知道如何添加毫秒。以下是我迄今为止所做的事情: a = "01:40.4
我有一个包含秒数的 float8,即 65.455。我试图在 View 中设置列的格式,使其显示为 1:05.455。 像这样使用 postgres 命令:TO_CHAR((user_data.tot
我有 vba 问题,我一直试图找到答案很长时间。我有来自众多客户的大量电子表格,我在这些电子表格上运行宏,我是编码新手,并且能够大致弄清楚我需要做什么。我的客户每月向我们发送数据,并且每个月的行数都在
我正在尝试编写一个正则表达式,允许输入以分钟、秒、十分之一和百分之一为单位的时间。我遇到的问题是,还应该允许用户输入仅秒和十分之一或秒、十分之一和百分之一的时间。变化如下: 分:秒:日分:秒:日毫米:
我想知道输入“+1”是什么意思 scanf("%s", ss+1) 其中 ss 是字符串输入。 我正在解决 codechef 上的一个问题,当我尝试阅读其他一些解决方案以了解其他可能的解决方案/方法时
我想验证 jquery 函数接收的某个字符串。 这是我到目前为止所做的 var duration=$('#duration').val(); if(//string validation?) {
Porter Stemmer algorithm 的意义何在?是否有将 SS 转换为 SS 的规则? 最佳答案 假设规则 SS->SS 不在算法中。然后像 caress 这样的词根本不会被识别,而且算
有谁知道,是否可以在 mpv.conf 中设置包括毫秒在内的默认显示时间格式? 现在我需要点击时间切换到毫秒,因为手册中的选项 ,,timems'' https://mpv.io/manual/mas
我有一个按以下方式计算的变量 currTime: long currTime = System.currentTimeMillis() - start; //where start is the st
我正在尝试编写将秒数转换为以下格式的逻辑: HH:MM:SS:MS,其中 MS 为毫秒 HH:MM:SS;F,其中 F 是帧 (不仅仅是 HH:MM:SS,因此这个问题与 Stackoverflow
我正在使用以下代码以“dd/MM/yyyy HH:mm:ss.SS”格式获取日期。 import java.text.SimpleDateFormat; import java.uti
我有一天中每一分钟的数据点: import numpy as np data = np.random.random(1440,) # I can represent minutes as intege
这是查询的工作版本。我只需要用 AS 保存新值。谢谢 Andy。 $Wednesday = mysqli_query($conn, "SELECT *,TIME_FORMAT(class_start,
我有下表没有时区的时间戳(6) 2000/01/01 0:00:00 2000/01/01 10:00:00 2000/01/01 04:00:00 我想得到hh:mm:ss我想要的结果如下 0:00
我是一名优秀的程序员,十分优秀!