澳大利亚时区

作者:  Paul King
PMC 成员

发布时间:2023-02-20 08:00PM


Ken Kousen 发布了另一集 Tales from the jar side,其中包括南极洲的时区。

Research stations and timezones in Antarctica

让我们在 Groovy 中重现他的例子,然后再更广泛地研究澳大利亚的时区。为什么是澳大利亚?嗯,我来自那里,而且肯的文章中提到了我们将要讨论的一个事实。首先,这是肯在南极的探索的等价物

Groovy Shell (4.0.26, JVM: 21.0.6)
Type ':help' or ':h' for help.
-------------------------------------------------------------------------------
groovy:000> import java.time.*
===> java.time.*
groovy:000> southPole = ZoneId.of('Antarctica/South_Pole')
===> Antarctica/South_Pole
groovy:000> dst = southPole.rules.isDaylightSavings(Instant.now())
===> true
groovy:000> "The South Pole ${dst ? 'IS' : 'IS NOT'} currently on DST"
===> The South Pole IS currently on DST
groovy:000>

我不想透露肯的妙语,南极,特别是阿蒙森-斯科特站,目前正处于夏令时。如果你想知道这为什么会很奇怪,请阅读他的文章或参加肯的讲座!

说到奇怪,肯还提到了另一个与澳大利亚时区相关的奇怪事实。澳大利亚有一个时区——尤克拉(Eucla),它有 45 分钟的时差。而这还不是唯一有趣的事实!

让我们看看所有的澳大利亚时区,包括尤克拉,以及凯西、戴维斯和莫森这三个南极研究站(见上图右侧)。

在深入编码之前,让我们先看看我们感兴趣的时区。首先是一张显示主要时区的图片(来源:维基百科)

Australian timezones

现在是一个更完整的表格

缩写 时区名称 偏移量 使用地点

ACDT

澳大利亚中部夏令时

UTC +10:30

夏季:南澳大利亚州,新南威尔士州的布罗肯希尔/扬科维纳县

ACST

澳大利亚中部标准时间

UTC +9:30

冬季:南澳大利亚州,新南威尔士州的布罗肯希尔/扬科维纳县
全年:北领地

ACT

澳大利亚中部时间

常用于 ACDT/ACST 之间切换的地区的缩写

ACWST

澳大利亚中西部标准时间

UTC +8:45

尤克拉

AEDT

澳大利亚东部夏令时

UTC +11

夏季:澳大利亚首都领地,新南威尔士州(布罗肯希尔/扬科维纳县除外),塔斯马尼亚州,维多利亚州
全年:麦夸里岛

AEST

澳大利亚东部标准时间

UTC +10

冬季:澳大利亚首都领地,新南威尔士州(布罗肯希尔/扬科维纳县除外),塔斯马尼亚州,维多利亚州
全年:昆士兰州,珊瑚海群岛

AET

澳大利亚东部时间

常用于 AEDT 或 AEST(或两者之间切换)地区的缩写

AWDT

澳大利亚西部夏令时

UTC +9

目前未使用

AWST

澳大利亚西部标准时间

UTC +8

西澳大利亚州,阿什莫尔和卡捷群岛

CCT

科科斯群岛时间

UTC +6:30

科科斯(基林)群岛

CXT

圣诞岛时间

UTC +7

圣诞岛

LHDT

豪勋爵岛夏令时

UTC +11

夏季:豪勋爵岛

LHST

豪勋爵岛标准时间

UTC +10:30

冬季:豪勋爵岛

NFDT

诺福克夏令时

UTC +12

夏季:诺福克岛

NFT

诺福克时间

UTC +11

冬季:诺福克岛

TFT

法属南部和南极时间

UTC +5

赫德岛和麦克唐纳群岛

CAST

凯西时间

冬季:UTC +8
夏季:UTC +11

凯西南极站

DAVT

戴维斯时间

UTC +7

戴维斯南极站

MAWT

莫森时间

UTC +5

莫森南极站

你可能首先注意到,时区相当多!其次,大多数国家的时区偏移量是整数,但你应该注意到澳大利亚也有几个 30 分钟的偏移量。肯提到 45 分钟的偏移量甚至更罕见(全球只有 3 个)。让我们看看澳大利亚对这个专属俱乐部的贡献

var eucla = ZoneId.of('Australia/Eucla')
println eucla.rules.getStandardOffset(now)

这有以下结果

+08:45

为什么会有这么奇怪的偏移量呢?尤克拉位于纳拉伯平原,大约在珀斯和阿德莱德的中间,靠近州界。它曾是一个电报站所在地,据说为了尽量减少西澳大利亚和南澳大利亚工人并排整理电报时的困惑,他们将时区设置为他们各自州时区中间精确的一半。西澳大利亚和南澳大利亚(不包括夏令时)相差一小时三十分钟,所以中间的一半就导致了 45 分钟的偏移量!

Perth to Adelaide via Eucla

顺便说一下,如果你想看世界上最长的直线铁路(478 公里,297 英里),或者澳大利亚最长的柏油公路直线段(146 公里,91 英里),那么纳拉伯平原就是你该去的地方,否则它不会出现在大多数人必看旅游景点的名单上。

Nullarbor plain

但是,如果你想了解另一个鲜为人知的时区事实,纳拉伯平原就是必去之地!当印度太平洋列车在西澳大利亚州的卡尔古利和南澳大利亚州的奥古斯塔港之间行驶时,它有自己的时间,称为“火车时间”(UTC+09:00)。我们后续的探索不会遵循这个非官方时区,但如果我们也想包括它的话,它会为我们的列表再添一个!

Indian pacific train

其他一些鲜为人知的时区事实与澳大利亚的一些小岛有关。

一个有趣的时区事实适用于豪勋爵岛。豪勋爵岛距离新南威尔士州北部海岸略超过 600 公里(380 英里)。这大约是到新西兰的四分之一路程!离大陆这么远,它有一个比大陆早 30 分钟的时区也就不足为奇了。

Lord Howe Island

显然,几年前,总督希望至少在一年中的部分时间,时区与大陆一致,于是他们举行了全民公投,并投票决定在夏季实行 30 分钟的夏令时。

让我们检查一下这种现象

var lordHowe = ZoneId.of('Australia/Lord_Howe')
assert lordHowe.rules.getDaylightSavings(now).toMinutes() == 30

另一个岛屿时区异常适用于赫伦岛,它位于昆士兰州格莱斯顿海岸外 72 公里(45 英里)处。它有两个时区:岛上的度假村全年实行夏令时,而岛上的海洋研究中心和公园与野生动物办公室则保留东部标准时间。

最后,让我们收集所有适用于澳大利亚的不同偏移量

var ids = ['Australia/Tasmania', 'Antarctica/Davis',
   'Australia/ACT', 'Australia/Eucla', 'Australia/North', 'Australia/Yancowinna',
   'Australia/Victoria', 'Australia/Adelaide', 'Antarctica/Mawson', 'Antarctica/Casey',
   'Australia/Queensland', 'Australia/Lord_Howe', 'Australia/NSW', 'Australia/South',
   'Australia/West', 'Indian/Christmas', 'Indian/Cocos', 'Pacific/Norfolk']
Set offsets = []
for (id in ids) {
    var rules = ZoneId.of(id).rules
    offsets << rules.getStandardOffset(now) // non daylight saving offset
    offsets << rules.getOffset(now)         // daylight saving offset when run in Summer
}

让我们检查一下,我们需要在澳大利亚领土内处理 10 种不同的偏移量,其中 4 种是不常见的非整点偏移量。然后,我们将打印出这些偏移量。

assert offsets.size() == 10
assert offsets*.toString().count{ !it.endsWith(':00')} == 4
println offsets

两个断言都通过,最终的打印输出如下

[+10:00, +11:00, +07:00, +08:45, +09:30, +10:30, +05:00, +08:00, +06:30, +12:00]

让我们前往昆士兰州-新南威尔士州边境的黄金海岸,结束此文。

昆士兰州-新南威尔士州边境实际上将黄金海岸机场几乎精确地一分为二,包括跑道。理论上,夏季月份出发的航班在某个时区离开航站楼,然后在另一个时区从地面起飞。

Fireworks on the Gold Coast

这可能会严重搞乱航空公司的准点起飞统计数据!幸运的是,机场选择完全按照昆士兰时间运营,以避免任何潜在的混淆。

顺便说一下,如果你喜欢庆祝新年,黄金海岸可能是一个完美的旅游目的地。

Fireworks on the Gold Coast

你可以在特威德岬(Tweed Heads)派对和观看烟花,然后向北走几步到库兰加塔(Coolangatta),在那里你可以再次倒计时到午夜,只是晚了一个小时。