Időzóna áttekintése
Az TimeZoneInfo osztály leegyszerűsíti az időzóna-alapú alkalmazások létrehozását. Az TimeZone osztály támogatja a helyi időzóna és az egyezményes világidő (UTC) használatát. Az TimeZoneInfo osztály mindkét zónát támogatja, valamint minden olyan időzónát, amelyről a beállításjegyzék előre definiált információkat tartalmaz. Olyan egyéni időzónákat is TimeZoneInfo meghatározhat, amelyekről a rendszer nem rendelkezik információval.
Időzóna alapjai
Az időzóna egy földrajzi régió, ahol ugyanazt az időt használják. Általában, de nem mindig, a szomszédos időzónák egy órányi távolságra vannak egymástól. A világ időzónáinak bármelyikében az idő az egyezményes világidő (UTC) eltolásaként fejezhető ki.
A világ számos időzónája támogatja a nyári időszámítást. A nyári időszámítás úgy próbálja maximalizálni a nyári órákat, hogy tavasszal vagy kora nyáron egy órával előrehalad az idő előrehaladtával, és a nyár végén vagy ősszel visszatér a normál (vagy normál) időhöz. Ezeket a módosításokat a standard időhöz és a standard időtől kezdve korrekciós szabályoknak nevezzük.
A nyári időszámításra való áttérés egy adott időzónában rögzített vagy lebegő beállítási szabálysal határozható meg. A rögzített kiigazítási szabály meghatározza azt a dátumot, amelyen a nyári időszámításra vagy a nyári időszámításról való áttérés minden évben megtörténik. A nyári időszámításról a téli időszámításra való áttérés például minden évben október 25-én egy rögzített kiigazítási szabályt követ. Sokkal gyakoribbak a lebegőpontosítási szabályok, amelyek egy adott hónap egy adott hetének egy adott napját állítják be a nyári időszámításra vagy a nyári időszámításra való áttéréshez. A téli időről a nyári időszámításra való áttérés például március harmadik vasárnapján történik, egy lebegő beállítási szabályt követ.
A beállítási szabályokat támogató időzónák esetében a nyári időszámításra való áttérés kétféle rendellenes időpontot hoz létre: érvénytelen időpontokat és kétértelmű időpontokat. Érvénytelen idő az a nem létező idő, amelyet a téli időről a nyári időszámításra való áttérés hoz létre. Ha például ez az áttűnés egy adott napon, hajnali 2:00-kor következik be, és az idő hajnali 3:00-ra változik, minden reggel 2:00 és hajnali 2:59:59 közötti időintervallum érvénytelen. A kétértelmű idő az az idő, amely egy időzónában két különböző időpontra képezhető le. Ezt a nyári időszámításról a téli időszámításra való áttérés hozza létre. Ha például ez az áttűnés egy adott napon reggel 2:00-kor következik be, és az idő reggel 1:00-ra változik, minden 1:00 és reggel 1:59:59 közötti időintervallum szabványos időként vagy nyári időszámításként értelmezhető.
Időzóna terminológiája
Az alábbi táblázat az időzónák használata és az időzóna-tudatos alkalmazások fejlesztése során gyakran használt kifejezéseket határozza meg.
Időszak | Definíció |
---|---|
Korrekciós szabály | Egy szabály, amely meghatározza, hogy mikor következik be a nyári időszámításról a nyári időszámításra való áttérés, illetve a nyári időszámításról a téli időszámításra való visszatérés. Minden egyes korrekciós szabály rendelkezik egy kezdő és záró dátummal, amely meghatározza, hogy mikor van érvényben a szabály (például a kiigazítási szabály 1986. január 1-től 2006. december 31-ig van érvényben), egy különbözet (az az idő, ameddig a standard idő a kiigazítási szabály alkalmazása következtében változik), valamint arról a dátumról és időpontról, amikor az áttűnések a kiigazítási időszak alatt történnek. Az áttűnések rögzített vagy lebegő szabályt is követhetnek. |
Kétértelmű idő | Egy idő, amely egy időzónában két különböző időpontra képezhető le. Ez akkor fordul elő, ha az idő vissza van állítva az időben, például az időzóna nyári időszámításáról a téli időszámításra való áttérés során. Ha például ez az áttűnés egy adott napon reggel 2:00-kor következik be, és az idő reggel 1:00-ra változik, minden 1:00 és reggel 1:59:59 közötti időintervallum szabványos időként vagy nyári időszámításként értelmezhető. |
Rögzített szabály | Egy olyan korrekciós szabály, amely beállítja a nyári időszámításra vagy a nyári időről való áttérés egy adott dátumát. A nyári időszámításról a téli időszámításra való áttérés például minden évben október 25-én egy rögzített kiigazítási szabályt követ. |
Lebegő szabály | Olyan korrekciós szabály, amely egy adott hónap egy adott hetének egy adott napját állítja be a nyári időszámításra vagy a nyári időszámításra való áttéréshez. A téli időről a nyári időszámításra való áttérés például március harmadik vasárnapján történik, egy lebegő beállítási szabályt követ. |
Érvénytelen idő | Nem létező idő, amely a téli időről a nyári időszámításra való áttérés összetevője. Ez akkor fordul elő, ha az idő előre van állítva, például az időzóna téli időről nyári időszámításra való váltása során. Ha például ez az áttűnés egy adott napon, hajnali 2:00-kor következik be, és az idő hajnali 3:00-ra változik, minden reggel 2:00 és hajnali 2:59:59 közötti időintervallum érvénytelen. |
Áttűnési idő | Információk egy adott időváltozásról, például a nyári időszámításról a téli időről a téli időszámításra való váltásról, vagy fordítva, egy adott időzónában. |
Időzónák és a TimeZoneInfo osztály
A .NET-ben egy TimeZoneInfo objektum egy időzónát jelöl. Az TimeZoneInfo osztály tartalmaz egy metódust GetAdjustmentRules , amely egy objektumtömböt TimeZoneInfo.AdjustmentRule ad vissza. A tömb minden eleme információt nyújt a nyári időszámításra való áttérésről egy adott időszakra vonatkozóan. (A nyári időszámítást nem támogató időzónák esetében a metódus üres tömböt ad vissza.) Minden TimeZoneInfo.AdjustmentRule objektum rendelkezik egy DaylightTransitionStart és egy DaylightTransitionEnd tulajdonságmal, amely meghatározza a nyári időszámításra és a nyári időszámításra való áttérés adott dátumát és időpontját. A IsFixedDateRule tulajdonság azt jelzi, hogy az áttűnés rögzített vagy lebegő.
A .NET a Windows operációs rendszer által megadott és a beállításjegyzékben tárolt időzóna-információkra támaszkodik. A föld időzónáinak száma miatt nem minden meglévő időzóna jelenik meg a beállításjegyzékben. Emellett mivel a beállításjegyzék dinamikus struktúra, előre definiált időzónák is hozzáadhatók vagy eltávolíthatók belőle. Végül a beállításjegyzék nem feltétlenül tartalmaz előzményidőzóna-adatokat. Windows XP rendszerben például a beállításjegyzék csak egyetlen időzóna-beállításkészlet adatait tartalmazza. A Windows Vista támogatja a dinamikus időzóna-adatokat, ami azt jelenti, hogy egy időzóna több olyan beállítási szabályt is tartalmazhat, amelyek adott időtartamokra vonatkoznak. A Windows Vista beállításjegyzékben definiált és a nyári időszámítást támogató időzónák többsége azonban csak egy vagy két előre meghatározott beállítási szabménnyel rendelkezik.
Az osztály függősége a TimeZoneInfo beállításjegyzékben azt jelenti, hogy egy időzóna-érzékeny alkalmazás nem lehet biztos abban, hogy egy adott időzóna van meghatározva a beállításjegyzékben. Ennek eredményeképpen egy adott időzóna példányosítására tett kísérletnek (a helyi időzónától vagy az UTC-nek megfelelő időzónától eltérő) kivételkezelést kell használnia. Emellett meg kell adnia valamilyen módszert az alkalmazás folytatására, ha egy szükséges TimeZoneInfo objektum nem hozható létre a beállításjegyzékből.
A szükséges időzóna hiányának kezeléséhez az TimeZoneInfo osztály tartalmaz egy metódust CreateCustomTimeZone , amellyel egyéni időzónákat hozhat létre, amelyek nem találhatók a beállításjegyzékben. Az egyéni időzónák létrehozásával kapcsolatos részletekért lásd : Időzónák létrehozása beállítási szabályok nélkül és útmutató: Időzónák létrehozása beállítási szabályokkal. Emellett a ToSerializedString metódussal sztringgé alakíthat át egy újonnan létrehozott időzónát, és mentheti azt egy adattárba (például adatbázisba, szövegfájlba, beállításjegyzékbe vagy alkalmazáserőforrásba). Ezután a metódussal visszakonvertálja ezt a FromSerializedString sztringet egy objektummá TimeZoneInfo . További részletekért lásd : Időzónák mentése beágyazott erőforrásba és útmutató: Időzónák visszaállítása beágyazott erőforrásból.
Mivel minden időzónát az UTC-től származó alapeltolás, valamint az UTC-ből származó, a meglévő beállítási szabályokat tükröző eltolás jellemez, az időzónákban lévő idő könnyen átalakítható egy másik időzónában lévő időpontra. Ebből a célból az TimeZoneInfo objektum számos konverziós módszert tartalmaz, többek között a következőket:
ConvertTimeFromUtc, amely az UTC-t egy kijelölt időzónában lévő időpontra konvertálja.
ConvertTimeToUtc, amely a kijelölt időzónában lévő időt UTC-vé alakítja.
ConvertTime, amely az egyik kijelölt időzónában lévő időt egy másik kijelölt időzónában lévő idővé alakítja át.
ConvertTimeBySystemTimeZoneId, amely az időzóna-azonosítókat (objektumok helyett TimeZoneInfo ) használja paraméterekként az egyik kijelölt időzónában lévő idő egy másik kijelölt időzónában lévő idővé alakításához.
Az időzónák közötti időátalakítással kapcsolatos részletekért lásd : Időzónák közötti időkonvertálás.