Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 了解Etc/GMT时区_Java_Iphone_Timezone_App Store_Jodatime - Fatal编程技术网

Java 了解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时区的理由是什么


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更重要。时区是特定地区人民使用的偏移量的过去、现在和未来变化的历史
正数与负数 不同行业的不同协议在编号方面有所不同,一些协议认为UTC之前的偏移量为正数,而其他协议则使用负数。对称地,一些人认为UTC后的偏移量为负值,而另一些人则认为UTC后的偏移量为正值

在我见过的大多数现代协议中,例如,UTC之前的偏移量(向东)为正,而UTC之后的偏移量(向西)为负。因此,美洲地区使用的偏移量为负数,例如
America/Los_Angeles
现在的偏移量为
-07:00
-08:00
(因时间不同而不同)

我建议您学会将这种方式(UTC右边是积极的,UTC左边是消极的)视为主流,反之则视为一种小的恼人的变化

时区名称通常采用
大陆/地区
格式,如
美洲/埃德蒙顿
欧洲/巴黎
非洲/突尼斯
亚洲/加尔各答
,以及
太平洋/奥克兰
。请参见此(可能不是最新的)。也有一些例外。
Etc/GMT..
名称带有相反的加减约定:

  • Etc/GMT+1
    =
    -01:00
    offset=比UTC晚一小时
  • Etc/GMT+12
    =
    -12:00
    offset=UTC后12小时
……还有

  • Etc/GMT-1
    =
    +01:00
    offset=UTC前一小时
  • Etc/GMT-12
    =
    +12:00
    offset=UTC前12小时
困惑?欢迎来到日期时间处理的古怪世界。从这里开始就更奇怪了

要点:

  • 理解发布数据的人的含义和意图。永远不要假定输入字符串的含义
  • 仅对所有日期时间工作使用java.time类。永远不要使用糟糕的遗留类
    java.util.Date
    Calendar
    SimpleDateFormat
    ,等等
幸运的是,java.time类可以帮助您解决这一难题。请参阅使用
ZoneId
类的说明

你的问题 苹果使用Etc/GMT时区的基本原理

它们意味着零点的偏移量,UTC本身。字符串
Etc/GMT
是一个标准标签,表示与UTC的偏移量为零小时分秒

字母
Z
(发音为“Zulu”),通常出现在dat的末尾
val response = objectMapper.readValue(rawResponse)
    ZoneId etcGmt = ZoneId.of("Etc/GMT");