将时间“PT10H30M”转换为“10:30 AM”时间JAVA Android

时间:2017-07-14 18:42:38

标签: java android time timestamp

我正在尝试将格式为"PT10H30M"的时间转换为格式"10:30 AM",并将其保存在Java Android中的Date,时间或时间戳变量上。

任何解决方案吗?

1 个答案:

答案 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。)