
// // Copyright (c) 2007, Brian Frank and Andy Frank // Licensed under the Academic Free License version 3.0 // // History: // 28 Sep 07 Brian Frank Creation // ** ** TimeZone represents a region's offset from UTC and its daylight ** savings time rules. TimeZones are historical - UTC offset and DST ** rules may change depending on the year. The Fan implementation of ** historical time zones is optimized to handle only year boundaries (so ** some historical changes which don't occur on year boundaries may ** not be 100% accurate). ** ** The Fan time zone database and naming model is based on the ** [ZoneInfo database]`http://www.twinsun.com/tz/tz-link.htm` used ** by UNIX and Java (also known as the Olsen database). All time ** zones have both a simple `name` and a `fullName`. The 'fullName' ** is the full identifier used in the zoneinfo database such as ** "America/New_York". The simple name is the city name only ** such as "New_York". ** @simple const class TimeZone { ** ** List the names of all the time zones available in the ** local time zone database. This database is stored in ** "{home}/lib/timezone.ftz" as a binary file. This ** list contains only the simple names such as "New_York" ** and "London". ** static Str[] listNames() ** ** List all zoneinfo (Olsen database) full names of the ** time zones available in the local time zone database. ** This list is the full names only such as "America/New_York" ** and "Europe/London". ** static Str[] listFullNames() ** ** Find a time zone by name from the built-in database. ** Either the simple name like "New_York" or the zoneinfo ** full name "America/New_York" may be used. If the time zone ** doesn't exist and checked is false then return ** null, otherwise throw ParseErr. ** static TimeZone fromStr(Str name, Bool checked := true) ** ** Get the time zone which represents UTC. ** static TimeZone utc() ** ** Get the current default TimeZone of the VM. The default ** timezone is configured by the Java or .NET runtime or it ** can be manually configured in "sys.props" with the key ** "fan.timezone" and any value accepted by `fromStr`. Once ** Fan is booted, the default timezone cannot be changed. ** static TimeZone current() ** ** Get the identifier of this time zone in the time zone ** database. Name is the city name portion of the zoneinfo ** `fullName` identifier such as "New_York" or "London". ** Str name() ** ** Get the full name of this time zone as defined by the zoneinfo ** database. These names are formatted as "contintent/location" ** where location is a major city within the time zone region. ** Examples of full names are "America/New_York" and "Europe/London". ** Str fullName() ** ** Get the duration of time added to UTC to compute standard time ** in this time zone. The offset is independent of daylight savings ** time - during daylight savings the actual offset is this value ** plus `dstOffset`. ** Duration offset(Int year) ** ** Get the duration of time which will be added to local standard ** time to get wall time during daylight savings time (often 1hr). ** If daylight savings time is not observed then return null. ** Duration dstOffset(Int year) ** ** Get the abbreviated name during standard time. ** Str stdAbbr(Int year) ** ** Get the abbreviated name during daylight savings time ** or null if daylight savings time not observed. ** Str dstAbbr(Int year) ** ** Return `name`. ** override Str toStr() }