将时间“pt10h30m”转换为“上午10:30”时间

oxf4rvwz  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(451)

我想把时间转换成格式 "PT10H30M" 格式化 "10:30 AM" 把这个省下来 Date ,javaandroid中的time或timestamp变量。
有什么解决办法吗?

euoag5mw

euoag5mw1#

从技术上讲, PT10H30M 不是一个时间,而是一个持续时间:一个时间量(10小时30分钟)。该字符串采用标准iso8601格式。
尽管“名称”(10小时30分钟)与 10:30 AM (上午10小时30分钟),它们是完全不同的概念: 10:30 AM 表示一天中的某个时间 PT10H30M 表示时间量-例如,可以添加到日期/时间: 01:00 AM 加上 PT10H30M 结果
11:30 AM 11:00 PM 加上 PT10H30M 结果 09:30 AM 第二天的
不管怎样,你可以通过增加持续时间来实现你想要的 PT10H30M 到午夜( 00:00 ).
在android中,您可以使用threeten backport,这是Java8新的日期/时间类的一个很好的backport。你还需要3TENABP(更多关于如何在这里使用它)。
你可以使用 LocalTime (表示时间,包括小时、分钟、秒和纳秒),使用午夜00:00:00.0的常量,并添加 Duration 致:

import org.threeten.bp.LocalTime;
import org.threeten.bp.Duration;

LocalTime time = LocalTime.MIDNIGHT.plus(Duration.parse("PT10H30M"));

结果将是 time 保存对应于的值的变量 10:30 AM .
如果你想要相应的 String ,您可以使用 org.threeten.bp.format.DateTimeFormatter :

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("h:mm a", Locale.ENGLISH);
System.out.println(time.format(fmt));

结果是 String 有价值的 10:30 AM . (注意,我还使用了 java.util.Locale 以确保正确格式化 String ).

相关问题