Java 了解Etc/GMT时区
当苹果从应用商店返回自动续费订阅的收据时,他们使用Etc/GMT时区的理由是什么Java 了解Etc/GMT时区,java,iphone,timezone,app-store,jodatime,Java,Iphone,Timezone,App Store,Jodatime,当苹果从应用商店返回自动续费订阅的收据时,他们使用Etc/GMT时区的理由是什么 Etc/GMT时区到底是什么?JavaSDK理解这个时区吗?或者我必须使用其他第三方库吗?Etc/GMT只是表示UTC、GMT、GMT0或GMT+00:00的标准方式 JavaJDK理解所有的格式。通过执行以下操作,您可以很容易地看到这一点: import java.util.TimeZone; public class Playground { public static void main(Stri
Etc/GMT时区到底是什么?JavaSDK理解这个时区吗?或者我必须使用其他第三方库吗?
Etc/GMT
只是表示UTC
、GMT
、GMT0
或GMT+00:00
的标准方式
JavaJDK理解所有的格式。通过执行以下操作,您可以很容易地看到这一点:
import java.util.TimeZone;
public class Playground {
public static void main(String... args) {
for (String s : TimeZone.getAvailableIDs()) {
System.out.println(s);
}
}
}
这将打印出Java JDK可以解析的所有不同的时区
格式:
…Etc/GMT
Etc/GMT+0
Etc/GMT-0
Etc/GMT0
Etc/格林威治
Etc/UCT
Etc/UTC
等/通用
Etc/GMT与UTC或GMT并不完全相同。它们仅在偏移量为0时表示相同的时间瞬间。在所有其他情况下,它们是完全不同的 苹果公司解释了这个名称 直接来自链接的引用给出了一个示例: 我们在区域名称和输出缩写中使用POSIX样式的符号, 尽管这与许多人的预期相反。 POSIX在格林威治以西有积极的迹象,但许多人都预计 格林威治以东的积极迹象。例如,TZ='Etc/GMT+4'使用 缩写为“GMT+4”,对应于UTC后4小时 (即格林威治以西)尽管很多人都希望 平均比UTC提前4小时(即格林威治以东) 我建议你使用应用商店收据,不要再考虑日期格式 添加工件() 使用任何HTTP客户端调用应用商店并获取响应(我在这里使用):
现在,您可以使用普通的Java API来处理响应。在跨时区传输时间点时,建议使用UTC或GMT(这两种方法大致相当,在大多数情况下我们不区分)。看来苹果正是这样做的 JDK可以很好地理解Etc/GMT
ZoneId etcGmt = ZoneId.of("Etc/GMT");
JDK使用tz数据库(以前称为Olson数据库;链接在底部)。数据库中的时区名称列表位于底部的另一个链接中<代码>Etc/GMT列在那里。您会注意到它是作为GMT的规范名称提供的(还有一些别名,一些是当前的,一些是不推荐的)
另外,我的代码行当然使用了java.time中的ZoneId
,这是现代java日期和时间API。这是您想要使用的JDK类(还有一个旧的、设计糟糕的时区类,您不想使用)
我想你不是想问,但对任何感兴趣的人来说:JDK也理解Etc/GMT+0
,Etc/GMT+1
,Etc/GMT0
,Etc/GMT-0
,Etc/GMT-1
,因为它们也在数据库中。它正确地处理了David Peden接受的答案中引用的反向符号
链接
- 简单地说,是UTC基准线之前或之后的时分秒数李>
- A更重要。时区是特定地区人民使用的偏移量的过去、现在和未来变化的历史
America/Los_Angeles
现在的偏移量为-07:00
或-08:00
(因时间不同而不同)
我建议您学会将这种方式(UTC右边是积极的,UTC左边是消极的)视为主流,反之则视为一种小的恼人的变化
时区名称通常采用大陆/地区
格式,如美洲/埃德蒙顿
,欧洲/巴黎
,非洲/突尼斯
,亚洲/加尔各答
,以及太平洋/奥克兰
。请参见此(可能不是最新的)。也有一些例外。Etc/GMT..
名称带有相反的加减约定:
=Etc/GMT+1
offset=比UTC晚一小时-01:00
=Etc/GMT+12
offset=UTC后12小时-12:00
=Etc/GMT-1
offset=UTC前一小时+01:00
=Etc/GMT-12
offset=UTC前12小时+12:00
- 理解发布数据的人的含义和意图。永远不要假定输入字符串的含义
- 仅对所有日期时间工作使用java.time类。永远不要使用糟糕的遗留类
,java.util.Date
,Calendar
,等等SimpleDateFormat
ZoneId
类的说明
你的问题
苹果使用Etc/GMT时区的基本原理
它们意味着零点的偏移量,UTC本身。字符串Etc/GMT
是一个标准标签,表示与UTC的偏移量为零小时分秒
字母Z
(发音为“Zulu”),通常出现在dat的末尾
val response = objectMapper.readValue(rawResponse)
ZoneId etcGmt = ZoneId.of("Etc/GMT");