尝试理解日期时间字符串中的“PT1H”是什么意思

21

我正在使用天气API作为我的项目的服务来获取天气信息。 我试图理解一些时区偏移量,但似乎找不到相关信息。

我使用的URL是:


我使用的URL是:

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等的任何信息。
如果有人能够提供建议,将不胜感激 - 谢谢

在这里解释:ISO 8601 - Ole V.V.
没有所谓的“太平洋时区”——太平洋接触许多时区。 - James Moore
1个回答

53

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() ;

1
你是正确的,以下网站https://en.wikipedia.org/wiki/ISO_8601提供了很好的描述。 - adviner
3
值得一提的是,“period”和“duration”在某些语境中是同义词,但在其他情况下则不是 - 例如在java.time中,它们具有相当不同(但相关)的含义。这很不幸,但我认为值得警告。 - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接