从 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 ) )
我有一个字符串表示 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 ) )