当前位置: 首页 > 知识库问答 >
问题:

Java8中GMT的区域ID是多少

公西志文
2023-03-14

我想以秒为单位获取差异,以确定系统时区是在远程时区的前面还是后面。这里的远程时区值是从数据库中获取的“格林尼治标准时间”。它可能是“美国/东方”,我将其转换为“美国/New_York”。但是对于格林尼治标准时间,我得到了错误。

ZoneId.systemDefault().getRules().getOffset(Instant.now()).getTotalSeconds() 
    - ZoneId.of("GMT").getRules().getOffset(Instant.now()).getTotalSeconds()

但它给出了以下错误,

Exception in thread "main" java.time.DateTimeException: Invalid ID for ZoneOffset, invalid format: 
    at java.time.ZoneOffset.of(Unknown Source)
    at java.time.ZoneId.of(Unknown Source)
    at java.time.ZoneId.of(Unknown Source)

如何解决此错误?用什么代替GMT??

共有3个答案

齐文林
2023-03-14

这是ZoneId。of(“UTC”)。。。

以下是证据:

public static void main(String[] args) {
    // define the ZoneId
    ZoneId utc = ZoneId.of("UTC");
    // get the current date and time using that zone
    ZonedDateTime utcNow = ZonedDateTime.now(utc);
    // define a formatter that uses O for GMT in the output
    DateTimeFormatter gmtStyleFormatter = DateTimeFormatter
                                            .ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSS O");
    // and print the datetime using the default DateTimeFormatter and the one defined above
    System.out.println(utcNow + " == " + utcNow.format(gmtStyleFormatter));
}

输出(不久前):

2020-09-16T08:02:34.717Z[UTC] == 2020-09-16T08:02:34.717 GMT

获取此区域的总区域偏移量(秒)

utc.getRules().getOffset(Instant.now()).getTotalSeconds();

将导致0,因为该区域没有偏移。

昝晗昱
2023-03-14

官方答案是:

等/格林尼治标准时间

除了名字之外,它与其他答案中建议的Etc/UTC相同。

为了完整性起见,同一个别名有很多,其中许多已弃用,而不是全部。你可以在链接中找到它们。

我并不不同意那些告诉你更喜欢世界协调时的评论。我只是想回答被问到的问题。

对于你的情况,你根本不需要问<代码>区域ID。的(“GMT”)。getRules()。getOffset(Instant.now())。getTotalSeconds()应始终生成0,因此无需减去任何值。我要么插入一条注释,为什么不插入,要么减去一个名为0的常数。

链接:tz数据库时区列表

石喜
2023-03-14

使用Etc/UTC

import java.time.Instant;
import java.time.ZoneId;

public class Main {
    public static void main(String args[]) {
        System.out.println(ZoneId.of("Etc/UTC").getRules().getOffset(Instant.now()).getTotalSeconds());
    }
}

输出:

0
 类似资料:
  • Azure中的一些区域被称为EUAP区域,但我无法找到任何关于这意味着什么的定义。EUAP代表什么? https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.documents.locationnames.centraluseuap?view=azure-网络 从上面的链接: Azure Cosmos DB服务中Azure美国中部EU

  • 问题内容: 什么啊 和之间是什么关系? 问题答案: 元空间 是用于存储类元数据的内存区域,元类是在解析文件时创建的内部JVM结构。 类元数据包括: Java类的内部表示 具有字节码的方法 字段描述符 恒定池 符号 注解 等等 默认情况下是无限的。 当option为ON(堆<32G的默认设置)时,类将从Metaspace移到称为 Compressed Class Space 的单独区域。这是为了使用

  • 我使用Cosmos DB多区域(单区域写入)帐户。目前,它在美国东部和西部启用。写入区域位于美国西部。在美国东部和西部都部署了变更源监听器。 鉴于这种设置,我想了解更改提要是如何工作的? < li >更改摘要侦听器是否从其部署的区域接收更改摘要。例如,东方的听众从东方阅读,西方的听众从西方阅读。 或 我正在使用change feed处理器库读取change Feeds,代码如下:

  • 问题内容: 苹果使用Etc / GMT时区的原因是什么,当苹果从App Store返回收据以进行自动续订时,该理由是什么。 Etc / GMT时区到底是什么时间?Java SDK是否了解该时区?还是我必须使用其他第三方库(如Joda- Time) ? 问题答案: Etc / GMT 与UTC或GMT 并不 完全相同。仅当偏移量为0时,它们表示时间上的同一时刻。在所有其他情况下,它们是完全不同的。

  • 时区问题:-北京、重庆、香港、乌鲁木齐(GMT 8) 在Debug中获取上述时区的ID:-[南极洲/凯西,亚洲/文莱,亚洲/赤塔,亚洲/乔巴山,亚洲/重庆,亚洲/重庆,亚洲/哈尔滨,亚洲/香港,亚洲/伊尔库茨克,亚洲/库拉山-隆坡,亚洲/古晋,亚洲/澳门,亚洲/澳门,亚洲/望加锡,亚洲/马尼拉,亚洲/上海,亚洲/新加坡,亚洲/台北,亚洲/乌荣-潘丹,亚洲/乌兰巴托,亚洲/乌兰巴托,澳大利亚/珀斯,

  • 我想把美国/凤凰城转换成格林威治标准时间 输出 我在等格林威治时间 由于美国/凤凰城的区域偏移为-7小时,但实际输出为7小时