我正在尝试将格式为"PT10H30M"
的时间转换为格式"10:30 AM"
,并将其保存在Java Android中的Date
,时间或时间戳变量上。
任何解决方案吗?
答案 0 :(得分:2)
从技术上讲,PT10H30M
不是时间,而是代表duration:金额的时间(10小时30分钟)。该字符串采用标准ISO 8601格式。
虽然“名称”(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,这是Java 8新日期/时间类的绝佳后端。您还需要ThreeTenABP(更多关于如何使用它here)。
您可以使用LocalTime
00:00:00.0使用nanoseconds(表示时间,小时,分钟,秒和constant for midnight),然后添加{{ 3}}到它:
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
。)