标签: tzdata

我应该如何以及在哪里建议重命名现有时区名称?

时区的历史上存在一些特定时区被重命名的案例。例如,Asia/Calcutta时区已被视为已过时并被替换Asia/Kolkata

在乌克兰,根据国际标准,有一个时区称为Europe/Kiev。乌克兰首都的正式名称为“基辅”。“基辅”是一个错误的版本,早在 1991 年苏联解体之前就已出现。

我们有一个非常大的程序员社区,他们希望开始将Europe/Kiev时区重命名为Europe/Kyiv. 我们知道每个人都需要很长时间才能过渡,但必须从长远来看。

我们如何以及在何处提出此建议,以便正式统治时区名称的人员可以对其进行审查?

timezone tzdata

24
推荐指数
1
解决办法
4306
查看次数

较新 JDK 版本中的历史时区偏移

我在使用 . 测试一些时区时发现了一个奇怪的 java 差异ZonedDateTime。我试图解析 1970 年之前的日期,发现结果在 java 版本之间发生变化。1932 年荷兰的偏移量是+00:19。有谁知道为什么会发生这种情况?我觉得这可能与时区数据库项目( https://github.com/eggert/tz )中欧洲时区的捆绑有关,但我不确定。有没有办法获得java中的旧行为?就像设置一样?


ZonedDateTime zdt = LocalDateTime.parse("1932-10-20T10:19:32.000").atZone(ZoneId.of("Europe/Amsterdam"));
System.out.println(zdt);
    
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .append(ISO_LOCAL_DATE)
    .appendLiteral('T')
    .appendValue(HOUR_OF_DAY, 2)
    .appendLiteral(':')
    .appendValue(MINUTE_OF_HOUR, 2)
    .optionalStart()
    .appendLiteral(':')
    .appendValue(SECOND_OF_MINUTE, 2)
    .optionalStart()
    .appendFraction(NANO_OF_SECOND, 3, 3, true)
    .appendOffset("+HH:MM", "Z")
    .toFormatter();

System.out.println(formatter.format(zdt));

System.out.println(
    java.time.zone.ZoneRulesProvider
                  .getVersions("UTC")
                  .lastEntry()
                  .getKey()
);
Run Code Online (Sandbox Code Playgroud)

结果 Temurin (java jdk) 11.0.16 (预期输出),最后一行显示时区数据库版本:

1932-10-20T10:19:32+00:19:32[Europe/Amsterdam]
1932-10-20T10:19:32.000+00:19
2022a
Run Code Online (Sandbox Code Playgroud)

Temurin 11.0.17 的结果:

1932-10-20T10:19:32Z[Europe/Amsterdam]
1932-10-20T10:19:32.000Z
2022c
Run Code Online (Sandbox Code Playgroud)

编辑:从 17.0.5 开始,JDK 17 中也存在一个问题:

铁木林 17.0.4:

1932-10-20T10:19:32+00:19:32[Europe/Amsterdam]
1932-10-20T10:19:32.000+00:19
2022a
Run Code Online (Sandbox Code Playgroud)

铁木林 …

java timezone-offset tzdata java-11

18
推荐指数
1
解决办法
936
查看次数

在64位unix PHP上2038之后转换为UTC时出错

我需要在Centos 7.4 64位上使用php(5.4)将日期时间信息从本地时间(gtm + 1)转换为UTC

我尝试了以下程序:

function convertToUtc ($date)
{
  $dateTime = new DateTime ($date, new DateTimeZone('Europe/Rome'));
  $dateTime->setTimezone(new DateTimeZone('UTC'));
  return $dateTime->format('Y-m-d') . 'T' . $dateTime->format('H:i:s') . 'Z';
}
Run Code Online (Sandbox Code Playgroud)

这工作到2038年之后,它错误地计算DST总是返回1小时的偏移量:

2037:一切都好

LOCAL TIME           ->  UTC TIME

2037-03-28 10:12:13  ->  2037-03-28T09:12:13Z   the day before dst change

2037-03-29 10:12:13  ->  2037-03-29T08:12:13Z   the first DST day

2037-10-24 10:12:13  ->  2037-10-24T08:12:13Z   the last DST day

2037-10-25 10:12:13  ->  2037-10-25T09:12:13Z   the day after


2038 : ok until dst change

2038-03-27 10:12:13  ->  2038-03-27T09:12:13Z   OK

2038-03-28 10:12:13 …
Run Code Online (Sandbox Code Playgroud)

php datetime utc year2038 tzdata

8
推荐指数
1
解决办法
128
查看次数

在迁移内部运行时 :ets.lookup(:tzdata_current_release, :release_version) 上的参数错误

我有这段代码:

case Timex.Timezone.get(data) do
  {:error, _} = error ->
    error

  data ->
    {:ok, data}
end
Run Code Online (Sandbox Code Playgroud)

将保存在数据库中的时区放入结构中。

好吧,当运行通过 Ecto 查询获取一些数据的迁移时,我收到此错误:

** (ArgumentError) argument error
    (stdlib) :ets.lookup(:tzdata_current_release, :release_version)
    lib/tzdata/release_reader.ex:47: Tzdata.ReleaseReader.current_release_from_table/0
    lib/tzdata/release_reader.ex:14: Tzdata.ReleaseReader.simple_lookup/1
    lib/tzdata/release_reader.ex:7: Tzdata.ReleaseReader.zone_and_link_list/0
    lib/tzdata.ex:40: Tzdata.zone_exists?/1
    lib/timezone/timezone.ex:152: Timex.Timezone.name_of/1
    lib/timezone/timezone.ex:180: Timex.Timezone.get/2
    lib/common/ecto/timezone.ex:27: Common.Ecto.Timezone.load/1
    (ecto) lib/ecto/type.ex:661: Ecto.Type.process_loaders/3
    (ecto) lib/ecto/schema.ex:1490: Ecto.Schema.load!/5
    (ecto) lib/ecto/schema.ex:1442: Ecto.Schema.safe_load_zip/4
    (ecto) lib/ecto/schema.ex:1443: Ecto.Schema.safe_load_zip/4
    (ecto) lib/ecto/schema.ex:1430: Ecto.Schema.__safe_load__/6
    (ecto) lib/ecto/repo/queryable.ex:282: Ecto.Repo.Queryable.process_source/6
    (ecto) lib/ecto/repo/queryable.ex:170: Ecto.Repo.Queryable.preprocess/5
    (postgrex) lib/postgrex/query.ex:77: DBConnection.Query.Postgrex.Query.decode_map/3
    (postgrex) lib/postgrex/query.ex:64: DBConnection.Query.Postgrex.Query.decode/3
    (db_connection) lib/db_connection.ex:1019: DBConnection.decode/6
    (ecto) lib/ecto/adapters/postgres/connection.ex:73: Ecto.Adapters.Postgres.Connection.prepare_execute/5
    (ecto) lib/ecto/adapters/sql.ex:256: Ecto.Adapters.SQL.sql_call/6
Run Code Online (Sandbox Code Playgroud)

在堆栈跟踪中包含该代码并执行一些检查可以验证这确实是触发错误的调用,尽管这样做:

iex(1)> Timex.Timezone.get("America/Los_Angeles")
#<TimezoneInfo(America/Los_Angeles …
Run Code Online (Sandbox Code Playgroud)

elixir ecto tzdata

6
推荐指数
1
解决办法
1269
查看次数

如何修复阿尔卑斯山损坏的 tzdata2020c 时区数据库?

我只是偶然发现了用于 alpine 的 tzdata2020c 包的一个错误。在 2020 年 10 月 25 日下星期日的夏令时计划更改后,它不会计算欧洲/柏林的正确时间。 tzdata2020c 版本使用 CEST,例如 2020 年 10 月 31 日和欧洲/柏林时区,而 CET 是正确的。 

有谁知道如何手动添加新版本的 tzdata2020d 数据库,该数据库可在此处获得

我用 Go 编写的应用程序在 2020 年 10 月 31 日使用 tzdata2020c 错误地将 CEST 用于欧洲/柏林: tzdata2020c

同一应用程序在 2020 年 10 月 31 日使用 tzdata2020a 正确使用了欧洲/柏林的 CET: tzdata2020a

go alpine-linux tzdata

5
推荐指数
1
解决办法
939
查看次数

在 Asp.Net Core 容器中更改时区

我在具有以下基本映像的容器中运行我的应用程序:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base

当我发布应用程序时,容器时区是Greenwich Mean Time,因此我在数据库中的 NLog 条目关闭了 6 小时。

我可以通过进入容器并运行来更改时区, dpkg-configure tzdata并且在重新启动容器后,我的日志条目变得正常。但是,我想知道这是否可以通过 Dockerfile 或运行标志来完成?

nlog docker dockerfile asp.net-core tzdata

0
推荐指数
1
解决办法
1853
查看次数