按时区与位置查询
Querying by timezone vs location
Moment-timezone time 有方法 momnet.tz 需要两个参数:
- 特定日期时间
- 时区名称
它 returns 在给定日期时间在给定时区的时移(到 UTC)。好的
困扰我的问题:
- 当前属于特定时区的所有位置在过去是否也属于该时区?
- 所以如果两个位置目前属于某个时区,在过去(甚至在 1970 年之后)实际上有不同的时区(转换为 UTC)是不可能的。
- 原则上是否可以查询 tz-db 以获取特定的某种位置,而不是时区名称。
如有大神解惑,将不胜感激
Moment-timezone 使用来自 IANA time zone database(又名 TZDB、zoneinfo 或 Olson 数据库)的数据。您的大部分问题都由该数据解决,而不是由时刻时区本身解决。您会发现其他实现(针对其他语言、平台等)也有类似的行为。
theory file in the tzdb itself, and on Wikipedia 中有大量关于 tzdb 如何工作的信息,但我会看看是否可以解决您的具体问题:
do all the locations that currently belong to a particular timezone were in the past belonging to that zone also?
TZDB 根据城市分配时区(因为与其他区域边界相比,它们不太可能随时间变化)。通常,将选择给定区域内的一个城市,其时钟自 1970 年以来一直对齐,以代表该区域的时间。
当该地区的另一部分更改其时钟与该地区其他地区不同时,将创建一个新时区并在该地区选择一个新城市来代表该时区。我们称之为 "zone split"。两个区域的拆分之前的时间将匹配(LMT 条目除外),并且拆分和向前的时间将有所不同。这些地区的时间是否在未来某个时刻再次对齐并不重要。现在有两个区域并将继续存在 - 因为它们在过去的某个时间点偏离了。
so isn't it possible that if two locations even currently belonging to a certain timezone, in the past (even after 1970) had actually different timezones (shifts to UTC).
如果该地区有不同的计时历史,那么就会有两个不同的时区条目。因此,当您说 "locations" 时,如果您指的是 TZDB 中具有自己时区名称的两个不同城市,那么根据定义,它们不属于同一时区。例如,Europe/Moscow
和 Europe/Volgograd
目前都是 UTC+3 全年无 DST。然而在 1992 年初,莫斯科是 UTC+3,而伏尔加格勒是 UTC+4。他们之前的历史偏差更大。
另一方面,如果您谈论的位置 未在 TZDB 中明确引用 ,则存在对齐推定。比如西雅图在美国太平洋时区,全部用America/Los_Angeles
表示。因为没有唯一性 America/Seattle
,数据表示西雅图没有比洛杉矶唯一的时区历史。
就是说 - 过去曾出现过一些非常小的边缘案例,位于两个时区边界线上的小镇必须选择要观察的时区。还发生了一个明显位于边界一侧的小镇选择非正式地遵循边界另一侧邻近较大城市的时区的情况。这些更改有时会在 tzdb 讨论列表中提及,但很少作为不同的区域记录在数据中。
对于这些边缘情况,请记住 TZDB 仅跟踪城市 - 而不是可能划分城市或城镇的区域边界。为此,您必须使用不同的数据源。我知道的最好的一个是 Evan Siroky 的 timezone-boundary-builder 项目。
Is it possible in principle to query tz-db for specific some kind of location, not a timezone name.
您必须更具体地说明 "location" 的意思。如果您指的是 latitude/longitude 坐标 - 那么时区边界生成器数据 and the projects that use them 就是要走的路线。他们将帮助您解析一个 tzdb 标识符,然后您可以将其与 moment-timezone 或其他库一起使用。
Moment-timezone time 有方法 momnet.tz 需要两个参数:
- 特定日期时间
- 时区名称
它 returns 在给定日期时间在给定时区的时移(到 UTC)。好的
困扰我的问题:
- 当前属于特定时区的所有位置在过去是否也属于该时区?
- 所以如果两个位置目前属于某个时区,在过去(甚至在 1970 年之后)实际上有不同的时区(转换为 UTC)是不可能的。
- 原则上是否可以查询 tz-db 以获取特定的某种位置,而不是时区名称。
如有大神解惑,将不胜感激
Moment-timezone 使用来自 IANA time zone database(又名 TZDB、zoneinfo 或 Olson 数据库)的数据。您的大部分问题都由该数据解决,而不是由时刻时区本身解决。您会发现其他实现(针对其他语言、平台等)也有类似的行为。
theory file in the tzdb itself, and on Wikipedia 中有大量关于 tzdb 如何工作的信息,但我会看看是否可以解决您的具体问题:
do all the locations that currently belong to a particular timezone were in the past belonging to that zone also?
TZDB 根据城市分配时区(因为与其他区域边界相比,它们不太可能随时间变化)。通常,将选择给定区域内的一个城市,其时钟自 1970 年以来一直对齐,以代表该区域的时间。
当该地区的另一部分更改其时钟与该地区其他地区不同时,将创建一个新时区并在该地区选择一个新城市来代表该时区。我们称之为 "zone split"。两个区域的拆分之前的时间将匹配(LMT 条目除外),并且拆分和向前的时间将有所不同。这些地区的时间是否在未来某个时刻再次对齐并不重要。现在有两个区域并将继续存在 - 因为它们在过去的某个时间点偏离了。
so isn't it possible that if two locations even currently belonging to a certain timezone, in the past (even after 1970) had actually different timezones (shifts to UTC).
如果该地区有不同的计时历史,那么就会有两个不同的时区条目。因此,当您说 "locations" 时,如果您指的是 TZDB 中具有自己时区名称的两个不同城市,那么根据定义,它们不属于同一时区。例如,Europe/Moscow
和 Europe/Volgograd
目前都是 UTC+3 全年无 DST。然而在 1992 年初,莫斯科是 UTC+3,而伏尔加格勒是 UTC+4。他们之前的历史偏差更大。
另一方面,如果您谈论的位置 未在 TZDB 中明确引用 ,则存在对齐推定。比如西雅图在美国太平洋时区,全部用America/Los_Angeles
表示。因为没有唯一性 America/Seattle
,数据表示西雅图没有比洛杉矶唯一的时区历史。
就是说 - 过去曾出现过一些非常小的边缘案例,位于两个时区边界线上的小镇必须选择要观察的时区。还发生了一个明显位于边界一侧的小镇选择非正式地遵循边界另一侧邻近较大城市的时区的情况。这些更改有时会在 tzdb 讨论列表中提及,但很少作为不同的区域记录在数据中。
对于这些边缘情况,请记住 TZDB 仅跟踪城市 - 而不是可能划分城市或城镇的区域边界。为此,您必须使用不同的数据源。我知道的最好的一个是 Evan Siroky 的 timezone-boundary-builder 项目。
Is it possible in principle to query tz-db for specific some kind of location, not a timezone name.
您必须更具体地说明 "location" 的意思。如果您指的是 latitude/longitude 坐标 - 那么时区边界生成器数据 and the projects that use them 就是要走的路线。他们将帮助您解析一个 tzdb 标识符,然后您可以将其与 moment-timezone 或其他库一起使用。