尝试理解日期时间字符串中的“PT1H”

问题描述 投票:0回答:1

我正在使用天气 API 将天气信息作为我的项目的服务进行下载。我正在尝试了解一些我似乎无法找到相关信息的时区偏移。

我使用的网址是:

https://api.weather.gov/gridpoints/VEF/154,48

以下是一些示例返回值:

"temperature": {
    "sourceUnit": "F",
    "uom": "unit:degC",
    "values": [
        {
            "validTime": "2019-05-11T16:00:00+00:00/PT1H",
            "value": 18.333333333333371
        },
        {
            "validTime": "2019-05-12T04:00:00+00:00/PT2H",
            "value": 16.1111111111112
        },
        {
            "validTime": "2019-05-12T21:00:00+00:00/PT4H",
            "value": 26.666666666666742
        },
        ...
    ]
}

我理解 PT 表示太平洋时区。但我似乎找不到任何有关 1H2H 等字符旁边的信息。

如果有人可以提供建议,我们将不胜感激 - 谢谢

timezone timezone-offset
1个回答
54
投票

PT1H
= 一小时

我理解 PT 表示太平洋时区。

不,错误的假设。不是时区。

PT1H
代表持续时间,即与时间线无关的时间跨度。此格式在 ISO 8601 标准中定义。

  • P
    标志着开始,我想是“Period”的缩写,是持续时间的同义词。
  • T
    将任何年-月-日部分与任何小时-分钟-秒部分分开。我想是“时间”的缩写。

所以

PT1H
的意思是“一小时”。两个半小时就
PT2H30M

解析

您的输入

"2019-05-11T16:00:00+00:00/PT1H"
将起始时刻与持续时间相结合是ISO 8601标准的一部分。

这样的组合字符串可以通过

ThreeTen-Extra
库中的 Interval.parse 方法进行解析。

Interval interval = Interval.parse( "2019-05-11T16:00:00+00:00/PT1H" ) ;

一个

Interval
代表一对时刻,一对
Instant
物体。在您的例子中,第二个时刻是通过将持续时间添加到起始时刻来计算的。我们可以询问这对矩,表示为
Instant
对象(根据定义始终采用 UTC)。

Instant start = interval.getStart() ;
Instant stop = interval.getEnd() ;
© www.soinside.com 2019 - 2024. All rights reserved.