Australian Time Zones
Author: Paul King
Published: 2023-02-20 08:00PM
Ken Kousen posted another Tales from the jar side episode covering among other things, time zones in Antarctica.
Let’s replicate his example in Groovy before looking at time zones more broadly in Australia. Why Australia? Well, that’s where I’m from but also there’s a reference in Ken’s article to one of the facts we’ll look at. First, here is the equivalent of Ken’s exploration at the South Pole:
Groovy Shell (4.0.9, JVM: 17.0.2) 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>
Without wanting to give away Ken’s punch line, the South Pole, in particular, the Amundsen-Scott station, is currently on daylight saving time. Read his article or attend one of Ken’s talks if you wonder why that might be strange!
Speaking of strange, Ken also mentioned another strange fact related to Australian timezones. Australia has a zone, Eucla, with a 45-minute offset. And that’s not the only interesting fact!
Let’s look at all Australian timezones, including Eucla, and the three Antarctic research stations, Casey, Davis, and Mawson (seen on the right of the above map).
Before we dive into coding, let’s look at the timezones we’re interested in:
Abbreviation | Time zone name | Offset | Where used |
---|---|---|---|
Australian Central Daylight Time |
UTC +10:30 |
Summer: South Australia, Broken Hill/Yancowinna County in New South Wales |
|
Australian Central Standard Time |
UTC +9:30 |
Winter: South Australia, Broken Hill/Yancowinna County in New South Wales |
|
Australian Central Time |
Often used as an abbreviation for places which switch between ACDT/ACST |
||
Australian Central Western Standard Time |
UTC +8:45 |
Eucla |
|
Australian Eastern Daylight Time |
UTC +11 |
Summer: Australian Capital Territory, New South Wales except Broken Hill/Yancowinna County in New South Wales, Tasmania, Victoria |
|
Australian Eastern Standard Time |
UTC +10 |
Winter: Australian Capital Territory, New South Wales except Broken Hill/Yancowinna County in New South Wales, Tasmania, Victoria |
|
Australian Eastern Time |
Often used as an abbreviation for places in either AEDT or AEST (or switching between them) |
||
Australian Western Daylight Time |
UTC +9 |
Not currently in use |
|
Australian Western Standard Time |
UTC +8 |
Western Australia, Ashmore and Cartier Islands |
|
Cocos Islands Time |
UTC +6:30 |
Cocos (Keeling) Islands |
|
Christmas Island Time |
UTC +7 |
Christmas Island |
|
Lord Howe Daylight Time |
UTC +11 |
Summer: Lord Howe Island |
|
Lord Howe Standard Time |
UTC +10:30 |
Winter: Lord Howe Island |
|
Norfolk Daylight Time |
UTC +12 |
Summer: Norfolk Island |
|
Norfolk Time |
UTC +11 |
Winter: Norfolk Island |
|
French Southern and Antarctic Time |
UTC +5 |
Heard and McDonald Islands |
|
Casey Time |
Winter: UTC +8 |
Casey Antarctic Station |
|
Davis Time |
UTC +7 |
Davis Antarctic Station |
|
Mawson Time |
UTC +5 |
Mawson Antarctic Station |
The first thing you might notice, is that’s quite a few time zones! Secondly, most countries have whole number zone offsets, but you should notice that Australia has several 30-minute offsets too. Ken mentioned that 45-minute offsets are even rarer (3 in the world). Let’s look at Australia’s contribution to that exclusive club:
var eucla = ZoneId.of('Australia/Eucla')
println eucla.rules.getStandardOffset(now)
This has the following result:
+08:45
Why such a strange offset? Well, Eucla sits on the Nullarbor plain, about halfway between Perth and Adelaide, and close to the state border. It was once home to a telegram station and the story goes that to minimise confusion between the West Australian and South Australian workers who sat side-by-side sorting telegrams, they set the time zone to exactly halfway between their respective state timezones. Western Australia and South Australia are (excluding daylight saving) an hour and 30 minutes apart, so halfway between results in the 45-minute offset!
Incidentally, if you want to see the longest straight section of railway in the world (478 km, 297 mi), or the longest straight section of tarred road in Australia (146 km, 91 mi), then the Nullarbor plain is the place to be, but otherwise it’s not high on most folks tourist attractions must-see list.
But the Nullarbor is the place to be if you want to know about another obscure timezone fact! When the Indian Pacific train travels between Kalgoorlie, Western Australia and Port Augusta, South Australia, it has its own time known as "Train Time" (UTC+09:00). We won’t follow this unofficial timezone in our later exploration, but it would add another to our list if we wanted to include it too!
A few other obscure timezone facts relate to some of Australia’s smaller islands.
One interesting timezone fact applies to Lord Howe Island. Lord Howe Island is a little over 600 km (380mi) out from the north coast of New South Wales. That’s about 1/4 of the way to New Zealand! Being that far East of the mainland, it’s not surprising to find out that it has a timezone 30 minutes earlier than the mainland.
Apparently, some years back, the governor wanted to have a timezone coinciding with the mainland, for at least part of the year, so they held a referendum and voted in a 30-minute daylight saving time during Summer.
Let’s check this phenomenon:
var lordHowe = ZoneId.of('Australia/Lord_Howe')
assert lordHowe.rules.getDaylightSavings(now).toMinutes() == 30
Another Island timezone anomaly applies to Heron Island, 72 km (45 mi) off the coast of Gladstone in Queensland. It has two time zones: the island resort follows daylight saving time all year round, whereas the Marine Research Centre and the Parks and Wildlife office on the island remain on Eastern Standard Time.
Finally, let’s collect all the different offsets applicable to Australia:
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
}
Let’s check that there are 10 different offsets we need to deal with in Australian territories, with 4 being the less usual not-on-the-hour offsets. Then, we’ll print out the offsets.
assert offsets.size() == 10
assert offsets*.toString().count{ !it.endsWith(':00')} == 4
println offsets
The two assertions pass and the final println has the following output:
[+10:00, +11:00, +07:00, +08:45, +09:30, +10:30, +05:00, +08:00, +06:30, +12:00]
Just one final timezone obscurity to wrap up.
The Queensland-New South Wales border actually cuts Gold Coast Airport almost precisely in half, including the runway. Technically, flights departing in the summer months leave the terminal in one time zone and take off from the ground in another. This has the potential to severely muck up the airlines departed-on-time statistics! Thankfully the airport chooses to operate exclusively on Queensland time to avoid any potential confusion.
Incidentally, if you love to celebrate New Year’s Eve, Gold Coast might be the perfect destination. You can party and watch fireworks in Tweed Heads before heading just 10s of metres North to count down to midnight all over again, just one hour later.