java - 国家/地区本地 TZD 格式的纪元时间戳

标签 java datetime timezone dst country-codes

我有纪元时间戳和国家/地区。我想将该时间戳转换为给定国家/地区的本地时间戳(时区区域采用夏令时 (TZD) 格式,如下所示

)
yyyy-mm-ddThh:MM:ssTZD
e.g. 2018-02-25T22:36:23+0100

Timestamp : 1525370235
Country : NLD (ISO alpha-3 code)

如何在 Java 中实现这一目标?

更新 1:

我正在使用这种转换,但不确定它是正确还是错误。有人可以告诉我这是进行转换的正确方法

Locale locale = new Locale("NLD");
Date date = new Date(1525381190 * 1000L);
    SimpleDateFormat dateFormatCN = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ssZ", locale);

 //Output : 2018-05-03T01:59:50-0700

最佳答案

is this the corect way to do conversion

不,不是。我看到以下问题。

  • 这一切都是不可能的,因为许多国家跨越多个时区。这意味着,从国家代码中您无法知道要选择哪个时区。由于本地时间因时区而异,因此在这些情况下您无法打印正确的时间。跨越多个时区的国家包括但不限于加拿大、美国、墨西哥、格陵兰岛、巴西、厄瓜多尔、俄罗斯、印度尼西亚、基里巴斯,甚至荷兰(您的示例国家)。请注意,列表中包含一些人口最多的国家/地区,因此如果您的数据代表世界人口,您可能经常会遇到此问题。请参阅this list: List of time zones by country .
  • 区域设置和时区是两个不同的东西,尽管两者都或多或少与地点相关,但没有任何直接关系。因此,获取正确的区域设置对您没有帮助。您还可以看到打印输出的 UTC 偏移量为 -0700,而阿姆斯特丹夏季的正确偏移量为 +0200。
  • new Locale("NLD") 不会为您提供荷兰的有效区域设置。 Locale(String) 构造函数的参数是一个语言标记,例如荷兰语的 nl 或英语的 en。三个字母的国家/地区代码不起作用。
  • 因此,如果您只想完成您所询问的部分工作,则需要访问一些可以将国家/地区代码转换为国家/地区以及将国家/地区转换为时区的数据库。我不知道这里有什么好的选择,但我希望有一些这样的数据库可用。

java.time

最后,不要使用 SimpleDateFormatDate。这些类早已过时且设计不佳。荷兰大陆格式化纪元时间戳值的现代正确方法是:

    ZoneId zone = ZoneId.of("Europe/Amsterdam");
    String nldTime = Instant.ofEpochSecond(1_525_370_235L)
            .atZone(zone)
            .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
    System.out.println(nldTime);

打印:

2018-05-03T19:57:15+02:00

如果您需要不带冒号的偏移量,如+0200,请使用DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXX")

如果您想要荷兰加勒比地区城市的时间而不是阿姆斯特丹,请使用 America/Kralendijk 时区。那么结果是2018-05-03T13:57:15-04:00

关于java - 国家/地区本地 TZD 格式的纪元时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50158686/

相关文章:

java - JFrame 未执行! (Eclipse 编辑器)

java - 在 Java 中创建一个新线程有多昂贵?我们什么时候应该考虑使用线程池?

java - 删除具有关系的实体

mysql - 1292 : Incorrect datetime value: '' for column at row 1

php - 如何在 PHP 中更新 timezonedb(更新时区信息)?

java - 为什么使用 ServletRequestAware 而不是 ServletActionContext?

python - 如何在数天、数小时、数周和数月之后迭代一个时间跨度?

javascript - 如何从用户日期和时区输入正确地在数据库中存储UTC日期?

google-apps-script - Google 电子表格中的时区转换