پایگاه داده منطقه زمانی

پایگاه داده منطقه زمانی مجموعه ای مشترک از اطلاعات مربوط به مناطق زمانی جهان و قوانین برای مشاهده ساعت تابستانی است که در درجه اول برای استفاده با برنامه های کامپیوتری و سیستم عامل ها در نظر گرفته شده است. پل اگرت از سال 2005 ویراستار و نگهبان آن با حمایت سازمانی ICANN بوده است پایگاه داده tz همچنین به عنوان tzdata، پایگاه داده zoneinfo یا پایگاه داده منطقه زمانی IANA (پس از Internet Assigned Numbers Authority) و گاهی اوقات به عنوان پایگاه داده اولسون شناخته می شود که به مشارکت کننده موسس، آرتور دیوید اولسون اشاره می کند.

نامگذاری یکنواخت آن برای ورودی های پایگاه داده، مانند آمریکا / نیویورک و اروپا / پاریس، توسط پل اگرت طراحی شده است. پایگاه داده تلاش می کند تا مناطق زمانی تاریخی و تمام تغییرات مدنی را از سال 1970، یعنی دوره زمانی یونیکس، ثبت کند. همچنین ثانیه های کبیسه را ثبت می کند. پایگاه داده، و همچنین برخی از کد منبع مرجع، در مالکیت عمومی است. نسخه‌های جدید پایگاه داده و کد معمولاً چندین بار در سال به‌صورت ضمانت تغییرات منتشر می‌شوند.

## ساختار داده ها

### تعریف منطقه زمانی
در پایگاه داده منطقه زمانی، منطقه زمانی هر منطقه ملی است که در آن ساعت های محلی همه از سال 1970 توافق کرده اند. این تعریف ابتدا به مناطق جغرافیایی مربوط می شود که دارای ساعت های محلی ثابت بوده اند. یک منطقه زمانی با یک منطقه با یک فاصله زمانی استاندارد خاص از UTC متفاوت است، که اغلب به عنوان "منطقه زمانی" نامیده می شود. بنابراین، هر یک از مناطق زمانی تعریف شده توسط پایگاه داده منطقه زمانی ممکن است از چندین انحراف از UTC استفاده کند، مانند انحراف برای زمان استاندارد و ساعت تابستانی.

### فرمت های فایل
پایگاه داده منطقه زمانی به عنوان مجموعه ای از فایل های متنی منتشر می شود که قوانین و انتقال منطقه را در قالبی قابل خواندن توسط انسان فهرست می کند. برای استفاده، این فایل‌های متنی در مجموعه‌ای از فایل‌های باینری مستقل از پلتفرم کامپایل می‌شوند - یکی در هر منطقه زمانی. کد منبع مرجع شامل چنین کامپایلری به نام zic (کامپایلر اطلاعات منطقه) و همچنین کدی برای خواندن آن فایل ها و استفاده از آنها در API های استاندارد مانند : `()localtime`  و `()mktime` 

### محدوده های زمانی
هر منطقه زمانی دارای یک یا چند "خط منطقه" در یکی از فایل های متنی پایگاه داده منطقه زمانی است. اولین خط منطقه برای یک منطقه زمانی نام منطقه زمانی را می دهد. هر خط منطقه بعدی برای آن منطقه زمانی، نام آن را خالی می گذارد، که نشان می دهد برای همان منطقه خط قبلی اعمال می شود. هر خط منطقه برای یک منطقه، برای گستره ای از تاریخ و زمان، انحراف به UTC برای زمان استاندارد، نام مجموعه قوانین حاکم بر زمان تابستانی (یا خط فاصله اگر همیشه زمان استاندارد اعمال می شود) را مشخص می کند. اختصارات منطقه زمانی، و برای همه به جز آخرین خط منطقه، تاریخ و زمانی که محدوده تاریخ و زمانی تحت کنترل آن خط به پایان می رسد.

### قوانین زمان تابستانی (DST)
قوانین مربوط به ساعت تابستانی در مجموعه قوانین نامگذاری شده مشخص شده است. هر مجموعه قوانین دارای یک یا چند خط قانون در فایل های متنی است. یک خط قانون حاوی نام مجموعه قوانینی است که به آن تعلق دارد، اولین سالی که قانون در آن اعمال می‌شود، آخرین سالی که این قانون در آن اعمال می‌شود (یا «فقط» اگر فقط در یک سال اعمال شود یا «حداکثر» اگر این قانون اعمال شود. این قاعده در آن صورت عمل می کند)، نوع سالی که این قانون در مورد آن اعمال می شود ("-" اگر برای همه سال ها در محدوده مشخص شده اعمال شود، که تقریباً همیشه همینطور است، در غیر این صورت نامی به عنوان آرگومان برای یک اسکریپت استفاده می شود که نشان می دهد که آیا سال از نوع مشخص شده است یا خیر)، ماهی که قانون در آن اجرا می شود، روزی که قانون در آن اجرا می شود (که می تواند یک روز خاص باشد یا مشخصه ای مانند "آخرین یکشنبه ماه") ، زمانی از روز که قانون در آن اعمال می شود، مدت زمانی که باید به انحراف به UTC اضافه شود، و حرف یا حروفی که در مخفف منطقه زمانی استفاده می شود (به عنوان مثال، "S" اگر این قاعده بر زمان استاندارد حاکم است و اگر بر ساعت تابستانی حاکم باشد "D").

### نام مناطق زمانی
مناطق زمانی نام‌های منحصربه‌فردی به شکل «منطقه / مکان» دارند، به‌عنوان مثال. "آمریکا / نیویورک". همچنین انتخابی برای استفاده از نام‌ها یا معادل‌های انگلیسی و حذف علائم نگارشی و پسوندهای رایج انجام شد. کاراکتر زیر خط به جای فاصله ها استفاده می شود. خط فاصله در جایی استفاده می شود که در نام یک مکان ظاهر می شود. نام منطقه و مکان حداکثر 14 کاراکتر طول دارند.

#### حوزه
منطقه نام یک قاره، یک اقیانوس یا «و غیره» است. قاره ها و اقیانوس های مورد استفاده عبارتند از آفریقا، آمریکا، قطب جنوب، قطب شمال، آسیا، اقیانوس اطلس، استرالیا، اروپا، هند و اقیانوس آرام

از آنجایی که برخی از جزایر به سختی به یک قاره خاص متصل می شوند، اقیانوس ها را شامل می شود. برخی از آنها از نظر جغرافیایی به یک قاره و از نظر سیاسی به قاره ای دیگر متصل هستند. همچنین به مرزهای بین قاره ها مراجعه کنید.

منطقه ویژه "Etc" برای برخی از مناطق اداری استفاده می شود، به ویژه برای "Etc / UTC" که نشان دهنده زمان هماهنگ جهانی است. به منظور تطابق با سبک POSIX، نام مناطقی که با "Etc / GMT" شروع می شوند، علامتشان از استاندارد ISO 8601 معکوس شده است. در منطقه "Etc"، مناطق غرب GMT دارای علامت مثبت و مناطق شرقی دارای علامت منفی در نام خود هستند (به عنوان مثال "Etc / GMT-14" 14 ساعت جلوتر از GMT است).

#### محل
مکان نام یک مکان خاص در داخل منطقه است - معمولاً یک شهر یا جزیره کوچک

نام کشورها معمولاً در این طرح استفاده نمی شود، در درجه اول به این دلیل که به دلیل تغییرات مکرر سیاسی و مرزی، قوی نیستند. نام شهرهای بزرگ معمولاً دائمی‌تر است.[معمولاً پرجمعیت‌ترین شهر در یک منطقه برای نشان دادن کل منطقه زمانی انتخاب می‌شود، اگرچه ممکن است شهر دیگری انتخاب شود، اگر بیشتر شناخته شده باشد، و مکان دیگری، از جمله مکانی غیر از یک شهر، اگر منجر به نام مبهم کمتری شود، ممکن است مورد استفاده قرار گیرد. در صورتی که نام مکان مورد استفاده برای نشان دادن منطقه زمانی تغییر کند، قرارداد ایجاد نام مستعار در نسخه‌های آینده است تا نام قدیمی و جدید به هر دو اشاره داشته باشد. به همان ورودی پایگاه داده.

در برخی موارد مکان خود به عنوان یک نام ترکیبی نشان داده می شود، برای مثال منطقه زمانی "America / Indiana / Indianapolis". نام‌های سه سطحی عبارتند از: «آمریکا / آرژانتین / .»، «آمریکا / کنتاکی / .»، «آمریکا / ایندیانا / .» و «آمریکا / داکوتای شمالی / »

مکان انتخاب شده نماینده کل منطقه است. با این حال، اگر قبل از سال 1970 تفاوت هایی در داخل منطقه وجود داشته باشد، قوانین منطقه زمانی فقط در مکان ذکر شده اعمال می شود.

#### مثال ها

#### منطقه مثال و خطوط قانون
اینها خطوط قوانینی برای قوانین استاندارد زمان تابستانی ایالات متحده هستند، خطوط قوانین برای قوانین زمان تابستانی که در برخی سالها در منطقه زمانی شرقی ایالات متحده (به نام "NYC" به عنوان شهر نیویورک شهری است که آن منطقه را نشان می دهد) اجرا می شود. و خطوط منطقه برای منطقه زمانی آمریکا / نیویورک، از نسخه انتشار tzdata2011n پایگاه داده منطقه زمانی. خطوط منطقه و قوانین منعکس کننده تاریخ DST در ایالات متحده است.
```abl
# Rule  NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
Rule    US      1918    1919    -       Mar     lastSun 2:00    1:00    D
Rule    US      1918    1919    -       Oct     lastSun 2:00    0       S
Rule    US      1942    only    -       Feb     9       2:00    1:00    W # War
Rule    US      1945    only    -       Aug     14      23:00u  1:00    P # Peace
Rule    US      1945    only    -       Sep     30      2:00    0       S
Rule    US      1967    2006    -       Oct     lastSun 2:00    0       S
Rule    US      1967    1973    -       Apr     lastSun 2:00    1:00    D
Rule    US      1974    only    -       Jan     6       2:00    1:00    D
Rule    US      1975    only    -       Feb     23      2:00    1:00    D
Rule    US      1976    1986    -       Apr     lastSun 2:00    1:00    D
Rule    US      1987    2006    -       Apr     Sun>=1  2:00    1:00    D
Rule    US      2007    max     -       Mar     Sun>=8  2:00    1:00    D
Rule    US      2007    max     -       Nov     Sun>=1  2:00    0       S
....
# Rule  NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER
Rule    NYC     1920    only    -       Mar     lastSun 2:00    1:00    D
Rule    NYC     1920    only    -       Oct     lastSun 2:00    0       S
Rule    NYC     1921    1966    -       Apr     lastSun 2:00    1:00    D
Rule    NYC     1921    1954    -       Sep     lastSun 2:00    0       S
Rule    NYC     1955    1966    -       Oct     lastSun 2:00    0       S
# Zone  NAME            GMTOFF  RULES   FORMAT  [UNTIL]
Zone America/New_York   -4:56:02 -      LMT     1883 November 18, 12:03:58
                        -5:00   US      E%sT    1920
                        -5:00   NYC     E%sT    1942
                        -5:00   US      E%sT    1946
                        -5:00   NYC     E%sT    1967
                        -5:00   US      E%sT
```


#### داده های ذخیره شده برای هر منطقه
برای هر منطقه زمانی که چندین فاصله دارد (معمولاً به دلیل ساعت تابستانی)، پایگاه داده منطقه زمانی لحظه دقیق انتقال را ثبت می کند. این قالب می‌تواند تغییراتی در تاریخ و زمان انتقال نیز داشته باشد. مناطق ممکن است تغییرات قوانین تاریخی داشته باشند که به چندین دهه قبل برمی گردد (همانطور که در مثال بالا نشان داده شده است).

#### Zone.tab
فایل zone.tab در دامنه عمومی است و مناطق را فهرست می کند. ستون ها و مرتب سازی ردیف ها در نظرات فایل به شرح زیر است:
```
# This file contains a table with the following columns:
# 1.  ISO 3166 2-character country code.  See the file `iso3166.tab'.
# 2.  Latitude and longitude of the zone's principal location
#     in ISO 6709 sign-degrees-minutes-seconds format,
#     either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
#     first latitude (+ is north), then longitude (+ is east).
# 3.  Zone name used in value of TZ environment variable.
# 4.  Comments; present if and only if the country has multiple rows.
#
 # Columns are separated by a single tab.
# The table is sorted first by country, then an order within the country that
# (1) makes some geographical sense, and
# (2) puts the most populous zones first, where that does not contradict (1).
```


#### داده های قبل از سال 1970
هدف از داده‌های قبل از سال 1970 این است که برای شهر شناسایی کننده منطقه صحیح باشد، اما لزوماً برای کل منطقه صحیح نیست. این به این دلیل است که از سال 1970، مناطق جدید فقط برای تشخیص ساعت ها ایجاد می شوند.

به عنوان مثال، بین سال های 1963-10-23 و 1963-12-09 در برزیل فقط ایالت های میناس ژرایس، اسپیریتو سانتو، ریودوژانیرو و سائوپائولو زمان تابستانی داشتند. با این حال، درخواست جدایی از آمریکا / سائوپائولو در سال 2010 با این استدلال که از سال 1970، ساعت‌ها در کل منطقه یکسان است، رد شد.

زمان در آلمان، که توسط اروپا / برلین نشان داده می‌شود، برای سال 1945 که Trizone از قوانین ساعت تابستانی متفاوت از برلین استفاده می‌کرد، نادرست است.

## پوشش

### مناطقی که چندین کشور پس از 1970 را پوشش می دهند
دو منطقه وجود دارد که منطقه ای را پوشش می دهد که پس از سال 1970 توسط دو کشور تحت پوشش قرار گرفته است. پایگاه داده از تعاریف کشورها مطابق با ISO 3166-1 پیروی می کند که نسخه قبلی آن، ISO 3166، برای اولین بار در سال 1974 منتشر شد.

* آسیا / عدن – دو کشور تا سال 1990: یمن شمالی (ISO 3166-1: YE؛ پایتخت صنعا) و یمن جنوبی (جمهوری خلق، ISO 3166-1: YD، ISO 3166-3: YDYE؛ پایتخت: عدن).
* اروپا / برلین – دو کشور تا سال 1990: آلمان شرقی (ISO 3166-1: DD، ISO 3166-3: DDDE) و آلمان غربی (ISO 3166-1: DE).

## نگهداری
کد مرجع منطقه زمانی و پایگاه داده توسط گروهی از داوطلبان نگهداری می شود. آرتور دیوید اولسون بیشتر تغییرات را در کد مرجع منطقه زمانی انجام می دهد. Paul Eggert بیشتر تغییرات را در پایگاه داده منطقه زمانی انجام می دهد. تغییرات پیشنهادی به لیست پستی منطقه زمانی ارسال می شود که درگاهی به گروه خبری comp.time.tz Usenet است. فایل های منبع از طریق سرور IANA FTP توزیع می شوند. به طور معمول، این فایل‌ها توسط توزیع‌کننده نرم‌افزاری مانند Debian گرفته می‌شوند، کامپایل می‌شوند و سپس منبع و باینری‌ها به عنوان بخشی از آن توزیع بسته‌بندی می‌شوند. کاربران نهایی می‌توانند به رویه‌های به‌روزرسانی توزیع نرم‌افزار خود تکیه کنند، که ممکن است با تأخیر همراه باشد، یا منبع را مستقیماً دریافت کرده و خود فایل‌های باینری را بسازند. IETF  را منتشر کرده است، «روش‌هایی برای حفظ پایگاه داده منطقه زمانی» که بهترین شیوه‌ها را بر اساس اصول مشابه مستند می‌کند.

## سیستم های یونیکس مانند
مسیر استاندارد برای پایگاه داده منطقه زمانی  `/ usr / share / zoneinfo /`  در توزیع‌های لینوکس، macOS و برخی دیگر از سیستم‌های مشابه یونیکس است.

## استفاده و پسوند

### مرزهای مناطق زمانی
مرزهای جغرافیایی در قالب مجموعه مختصات بخشی از پایگاه داده منطقه زمانی نیستند، اما مرزها توسط Evan Siroky در قالب‌های GeoJSON و shapefile منتشر می‌شوند.

### استفاده در استانداردهای دیگر
مخزن داده های محلی مشترک یونیکد (CLDR) به مناطقی در پایگاه داده منطقه زمانی اشاره دارد. با این حال، از آنجایی که نام یک منطقه می تواند از یک نسخه پایگاه داده منطقه زمانی به دیگری تغییر کند، CLDR UN / LOCODE را برای شهر مورد استفاده در نام منطقه، یا یک کد اختصاص داده شده داخلی در صورتی که چنین شهری برای منطقه وجود نداشته باشد، اختصاص می دهد. منطقه، به یک منطقه پایگاه داده منطقه زمانی.

### استفاده در سیستم های نرم افزاری
پایگاه داده منطقه زمانی برای پردازش منطقه زمانی و تبدیل در بسیاری از سیستم های نرم افزاری کامپیوتری از جمله:

* سیستم های مشتق شده از BSD، از جمله FreeBSD، NetBSD، OpenBSD، DragonFly BSD، macOS، و iOS (آنها همچنین از کد پردازش پایگاه داده مرجع TZ به عنوان اجرای TZ POSIX API خود استفاده می کنند).
* کتابخانه گنو C و سیستم‌هایی که از آن استفاده می‌کنند، از جمله گنو، اکثر توزیع‌های لینوکس، BeOS، هایکو، Nexenta OS و Cygwin.
* سیستم های مشتق شده از System V Release 4، مانند Solaris و UnixWare
* AIX 6.1 و جدیدتر (نسخه های قبلی AIX، که با AIX 5.2 شروع می شود، شامل zoneinfo، برای پشتیبانی از برنامه های شخص ثالث مانند MySQL، اما خود از آن استفاده نکنید).
* اندروید
* چندین سیستم یونیکس دیگر، از جمله IRIX، Tru64، SunOS 4.x،  و UNICOS / mp.
* OpenVMS؛
* محیط اجرای جاوا از زمان انتشار 1.8 (2014)، به java.time.ZoneId مراجعه کنید.
* ماژول های پرل DateTime::TimeZone و DateTime::LeapSecond از سال 2003؛
* PHP از نسخه 5.1.0 (2005) منتشر شده است.
* سنگ روبی TZInfo.
* ماژول zoneinfo کتابخانه استاندارد پایتون و بسته شخص ثالث Pytz؛
* مشخصات زبان جاوا اسکریپت برای بین المللی سازی به صراحت استفاده از نام های منطقه زمانی IANA را برای API مشخص می کند و استفاده از داده های منطقه زمانی را نیز توصیه می کند.
** کتابخانه‌های متعددی نیز موجود است:  timezone-js, BigEasy/TimeZone, WallTime-js و moment-timezone.
* پانداهای ماژول پانداها (پایتون) – کتابخانه تجزیه و تحلیل داده پایتون؛
* NET Framework , کتابخانه های  NodaTime ، TZ4Net و zoneinfo در 24 دسامبر 2017 در Wayback Machine بایگانی شدند
* سری منطقه زمانی کتابخانه هاسکل و منطقه زمانی اولسون.
* ماژول Erlang ezic.
* بسته زمانی استاندارد کتابخانه برو؛
* جعبه زنگ chrono tz
* بسته زمانی Squeak Smalltalk
* کتابخانه های C++ Boost و Qt و C++20 chrono standard library's `std::chrono::tzdb`
* کتابخانه دلفی و پاسکال رایگان TZDB
* کتابخانه رایگان پاسکال PascalTZ
* زبان دستور ابزار دارای یک فرمان ساعت با استفاده از tzdata است.
* اوراکل از 10 گرم (2004) منتشر می شود.
* PostgreSQL از زمان انتشار 8.0 (2005)؛
* کتابخانه Microsoft SQL Server پشتیبانی منطقه زمانی SQL Server.
* MongoDB از زمان انتشار 3.6
* بسته Dart / Flutter Timezone در میخانه.
* نرم افزارهای تعبیه شده مانند سیستم عامل مورد استفاده در ساعت های IP

شناسه‌های منطقه زمانی اولسون همچنین توسط مخزن داده‌های محلی مشترک یونیکد (CLDR) و مؤلفه‌های بین‌المللی برای یونیکد (ICU) استفاده می‌شوند. به عنوان مثال، جدول CLDR Windows–Tzid شناسه‌های منطقه زمانی مایکروسافت ویندوز را به نام‌های استاندارد اولسون ترسیم می‌کند، اگرچه چنین نگاشتی نمی‌تواند کامل باشد زیرا تعداد مناطق زمانی در سیستم‌های ویندوز به طور قابل‌توجهی کمتر از پایگاه داده IANA TZ است

## تاریخ
منشا این پروژه به سال 1986 یا قبل از آن برمی گردد.

### دعوای حقوقی 2011
در 30 سپتامبر 2011، دعوی حقوقی، Astrolabe، Inc. علیه اولسون و همکاران، در مورد حق چاپ در پایگاه داده ثبت شد. در نتیجه، در 6 اکتبر 2011، فهرست پستی پایگاه داده و سایت FTP بسته شد. این پرونده حول استفاده نگهبانان پایگاه داده از The American Atlas، توسط Thomas G. Shanks، و The International Atlas، توسط Thomas G. Shanks بود. و ریک پوتنگر این سازمان از بازتولید غیرمجاز داده‌های اطلس در آرشیو فهرست پستی منطقه زمانی و در برخی از مجموعه‌های پیوند کمکی که با پایگاه داده نگهداری می‌شوند، شکایت کرد، اگرچه در واقع به خود پایگاه داده اشاره نکرد. این شکایت فقط به گردآوری داده‌های منطقه زمانی تاریخی مربوط می‌شود و جداول منطقه زمانی جهان tzdata موجود را پوشش نمی‌دهد

این دعوا در 22 فوریه 2012 پس از مشارکت بنیاد مرز الکترونیکی حل شد، زمانی که اسطرلاب به طور داوطلبانه اقدام به رد دعوا کرد بدون اینکه هرگز به متهمان ابلاغ شود و با عهد و پیمانی موافقت کرد که در آینده شکایت نکند.

### به ICANN بروید
ICANN مسئولیت نگهداری پایگاه داده را در 14 اکتبر 2011 بر عهده گرفت. پایگاه داده کامل و شرح برنامه های نگهداری آن به صورت آنلاین از IANA در دسترس است.

## همچنین ببینید

* فهرست مناطق زمانی پایگاه داده منطقه زمانی
* منطقه زمانی
* نور روز صرفه جویی در زمان

## منابع

* "Time Zone Boundary Builder"
* "Time zone and daylight saving time data"
* "Re: FW: IANA time zone registration – proposal"
* "Resolved timezone issue? Other issues. New ctime manual page"
* "proposal for time zone names"
* "Re: List of issues"
* 
* "questions and comments on http://tycho.usno.navy.mil/tzones.html"
* "Theory and pragmatics of the tz code and data"

رده:منطقه‌های زمانی