从 Java 中的当前时间减去小时数

Subtract number of hours from current time in Java

我有一个字符串表示 54:34:41 的持续时间,即 54 小时 34 分钟 41 秒。

我想提取 54 小时并从当前系统时间中减去它。

然而,当我 运行 下面时,我得到 java.time.format.DateTimeParseException: Text '54:34:41' could not be parsed: Invalid value for HourOfDay (valid values 0 - 23): 54

如何提取 54 小时并从当前时间中减去?

private val formatterForTime: DateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss")
val timeDuration = formatterForTime.parse("54:34:41")

val currentTime = LocalDateTime.now()
val newTime = currentTime.minusHours(timeDuration.get(ChronoField.HOUR_OF_DAY).toLong())

tl;博士

ZonedDateTime
.now( 
    ZoneId.of( "Asia/Tokyo" ) 
)
.minusHours(
    Integer.parseInt( "54:34:41".split( ":" )[0] )
)

详情

解析时间

获取小时数。

int hours = Integer.parseInt( "54:34:41".split( ":" )[0] ) ;

ISO 8601

您输入的 span-of-time 文本不符合 date-time 值的 ISO 8601 标准。 java.time 类 默认使用 parsing/generating 文本时的标准格式。

如果您使用 PT54H34M41S 而不是 54:34:41,那么我们可以使用:

int hours = Duration.parse( "PT54H34M41S" ).toHours() ;

我建议您坚持使用标准格式,而不是模棱两可的 clock-time 格式。

捕捉当下瞬间

捕捉特定时区的当前时刻。

ZoneId z = ZoneId.of( "Africa/Casablanca" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;

减去小时数

减去你的小时数。

ZonedDateTime earlier = zdt.minusHours( hours ) )