021-71053903 [email protected] پشتیبانی از شنبه تا چهارشنبه ساعت 9 الی 16

کتابخانه zoneinfo

مقدمه

این کتابخانه یکی از کتابخانه های استاندارد پایتون است که برای یافتن منطقه زمانی از آن استفاده می‌شود .

هر چند از کتابخانه ای چون datatime هم میشه به این منظور استفاده کرد اما کتابخانه zoneinfo یکی از بهترین پیشنهادات است که از پایگاه داده زمانی IANA اطلاعات رو فراهم  می کند که البته روی پایتون ورژن 3.9 به بالا پشتیبانی می‌شود.

Zoneinfo در صورت وجود از داده های زمانی سیستم استفاده می‌کند

نکته:

ماژول :datatime

انواع زمان و تاریخ رو با کلاس های ZoneInfo

برای استفاده ارائه می‌دهد

پکیج :tzdata

پکیجی که توسط توسعه دهندگان Cpython  برای تهیه داده های منطقه زمانی از طریق PyPIنگهداری می شود.

استفاده از ZoneInfo

ZoneInfo  مشخصی از کلاس های datetime.tzinfo است و قرار است به tzinfo متصل شود یا روش datetime.replace یا datetime.astimezone:

>>> from zoneinfo import ZoneInfo

>>> from datetime import datetime, timedelta

>>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo(“America/Los_Angeles”))

>>> print(dt)

2020-10-31 12:00:00-07:00

 

>>> dt.tzname()

‘PDT’

زمانهایی که از این روش استفاده می‌شود به حساب زمانبندی سازگار هستند و بدون هیچ گونه مداخله دیگری انتقال زمان را انجام می دهند:

>>> dt_add = dt + timedelta(days=1)

>>> print(dt_add)

2020-11-01 12:00:00-08:00

>>> dt_add.tzname()

‘PST’

این مناطق زمانی علاوه بر ویژگی های معرفی شده ویژگی دارد که زمانی ابهاماتی ایجاد میشود مانند عقب جلو کردن ساعت ها که دوبار در یال اتفاق می افتد  در روز به زمان استاندارد که قبل از انتقال زمان ها از fold=0و بعد از انتقال از fold=1 استفاده می‌شود به عنوان مثال:

>>> dt = datetime(2020, 11, 1, 1, tzinfo=ZoneInfo(“America/Los_Angeles”))

>>> print(dt)

2020-11-01 01:00:00-07:00

>>> print(dt.replace(fold=1))

2020-11-01 01:00:00-08:00

ماژول zoneinfo مستقیماً داده های مربوط به منطقه زمانی را ارائه نمی دهد، و در صورت در دسترس بودن ، اطلاعات منطقه زمانی را از پایگاه داده منطقه زمانی سیستم یا بسته شخص ثالث PyPI tzdata می گیرد.

برخی از سیستم ها ، از جمله سیستم های ویندوز ، پایگاه داده IANA در دسترس ندارند.

بنابراین برای پروژه هایی که سازگاری بین پلتفرمی را هدف قرار می دهند و به داده های منطقه زمانی نیاز دارند ، توصیه می شود از tzdata استفاده شود و وابستگی آن اعلام شود.

اگر این اتفاق نیفتد سیستم در پیدا کردن داده ها به مشکل بر میخورد و باعث بروز ارورر ZoneInfoNotFoundError می شود.

پیکربندی منابع داده

هنگامی که ZoneInfo (key) فراخوانی می شود ، سازنده ابتدا دایرکتوری های مشخص شده در TZPATH را برای یافتن کلید تطبیق فایل جستجو می کند و در صورت خرابی به دنبال یک مطابقت در بسته tzdata است. این رفتار را می توان به سه روش پیکربندی کرد:

TZPATH پیش فرض که در غیر این صورت مشخص نشده باشد ، می تواند در زمان کامپایل پیکربندی شود.

TZPATH را می توان با استفاده از یک متغیر محیط پیکربندی کرد.

در زمان اجرا ، می توان مسیر جستجو را با استفاده از تابع () reset_tzpath دستکاری کرد.

پیکربندی  compile-time

TZPATH پیش فرض شامل چندین مکان استقرار رایج برای پایگاه داده منطقه زمانی است(بجز در ویندوز )

در سیستم های POSIX ، توزیع کنندگان پایین دستی و آنهایی که پایتون را از مبدأ پایتون می دانند با مشخص کردن گزینه کامپایل زمان TZPATH (or, more likely, the configure flag –with-tzpath)

که باید به صورت string باشد توسط os.pathsep محدود شود.

در تمام سیستم عامل ها ، مقدار پیکربندی شده به عنوان کلید TZPATH در sysconfig.get_config_var () در دسترس است.

پیکربندی محیط

هنگام مقدار دهی اولیه TZPATH (یا در زمان وارد کردن یا هر زمان که reset_tzpath فراخوانی می شود (بدون استدلال)) ، ماژول zoneinfo از متغیر محیطی در صورت وجود ، برای تنظیم مسیر جستجو PYTHONTZPATH استفاده می کند .

 

PYTHONTZPATH

 

این یک رشته os.pathsep است که شامل مسیر جستجوی منطقه زمانی برای استفاده است.

این باید فقط از مسیرهای مطلق تشکیل شود.

پیکربندی زمان اجرا

مسیر جستجوی TZ همچنین می‌تواند در زمان اجرا با استفاده از تابع reset_tzpath() پیکربندی شود.

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

کلاس ZoneInfo

Class zoneinfo.ZoneInfo(KEY)

یک زیر کلاس از datetime.tzinfo که نشان دهنده یک منطقه زمانی از IANA است که توسط کلید رشته مشخص شده است . تماس با سازنده اصلی همیشه اشیائی را که با هم مقایسه می شوند بر می گرداند . به روش دیگر ، عدم اعتبار سنجی حافظه پنهان از طریق ZoneInfo.clear_cache() ، برای همه مقادیر Key ، ادعای زیر همیشه درست خواهد بود:

a = ZoneInfo(key)

b = ZoneInfo(key)

assert a is b

این کد یک شی زون اینفو از یک شی فایل گونه بایت برگشتی می سازد. برای مثال می توان یک فایل که به روش باینری یا شی آی او بایت باز می شود، اشاره کرد. برعکس سازنده ابتدایی، این کد همیشه یک شی جدید می سازد.

Key باید به شکل یک مسیر POSIX نسبی و عادی باشد ، هیچ مرجعی در سطح بالا وجود نداشته باشد . در صورت عبور key غیر مطابق ، ValueError را نمایش می‌دهد .

اگر فایلی برای key یافت نشد ، اررور ZoneInfoNotFoundError به شما نمایش داده می شود.

کلاس ZoneInfo دارای دو سازنده جایگزین است:

classmethod ZoneInfo.from_file(fobj, /, key=None)

 

classmethod ZoneInfo.no_cache(key)

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

اشیایی که از طریق این سازنده ایجاد می شوند ، در صورت عدم برداشتن حافظه نهان ، از یک فرآیند رفع عیب جدا می شوند.

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

classmethod ZoneInfo.clear_cache(*, only_keys=None)

روشی برای نامعتبر بودن حافظه پنهان در کلاس ZoneInfo . اگر هیچ استدلالی منتقل نشود ، همه حافظه پنهان نامعتبر است و تماس بعدی با سازنده اصلی برای key ، یک نمونه جدید را بر می‌گرداند .

اگر تعداد نامهای کلید قابل تکرار باشد به پارامتر only_keys منتقل می‌شود ، فقط کلید های مشخص شده از حافظه پنهان حذف می شوند. کلید های منتقل شده به only_keys اما در حافظه پنهان یافت نمی‌شوند

هشدار: فراخوانی این عملکرد ممکن است معنای زمان دیتا را با استفاده از ZoneInfo به طرز شگفت آوری تغییر دهد فقط درصورت استفاده از آن استفاده کنید.

کلاس یک ویژگی دارد:

 

ZoneInfo.key

این یک ویژگی فقط خواندنی است که مقدار کلید ارسال شده به سازنده را برمی گرداند ، که باید یک کلید جستجو در پایگاه داده منطقه زمانی IANA باشد (به عنوان مثال امریکا / نیویورک ، اروپا / پاریس یا آسیا / توکیو).

برای مناطق ساخته شده از فایل بدون تعیین پارامتر کلیدی ، این گزینه بر روی None تنظیم می شود.

نمایش های رشته ای

نمایش رشته هنگام فراخوانی str بر روی یک شی  ZoneInfoاست که به طور پیش فرض استفاده از ویژگی  ZoneInfo.key (بازگشت به یادداشت مربوط به استفاده در مستندات ویژگی ها) بازگشت:

>>> zone = ZoneInfo(“Pacific/Kwajalein”)

>>> str(zone)

‘Pacific/Kwajalein’

>>> dt = datetime(2020, 4, 1, 3, 15, tzinfo=zone)

>>> f”{dt.isoformat()} [{dt.tzinfo}]”

‘2020-04-01T03:15:00+12:00 [Pacific/Kwajalein]’

برای اشیا ساخته شده از یک فایل بدون تعیین پارامتر کلیدی ، str به فراخوانی repr() باز می گردد. rep ZoneInfo به صورت پیاده سازی تعریف شده و لزوما بین نسخه ها پایدار نیست، اما این کلید برای ZoneInfo یک کلید تضمین شده نخواهد شد.

کد گزاری برای ذخیره سازی(Pickle serialization)

به جای کد گزاری همه داده ها انتقال  اشیا ZoneInfo توسط key کد گزاری می شوند و اشیا ZoneInfo ساخته شده از فایل ها (حتی آنهایی که برای key مشخص شده اند) نمی توانند ذخیره سازی شوند.

رفتار یک فایل ZoneInfo به نحوه ساخت آن بستگی دارد:

ZoneInfo (key): هنگامی که با سازنده اصلی ساخته می شود ، یک شی ZoneInfo با key کدگزاری می شود ، و هنگامی که از حالت غیرفعال خارج می شود ، deserialization فرآیند از اولیه استفاده می کند و بنابراین انتظار می رود که این موارد همان شی مانند سایر مراجع همان مورد منطقه زمانی باشد.

به عنوان مثال ، اگر europe_berlin_pkl یک رشته ذخیره سازی شده است که از ZoneInfo ساخته شده است (“اروپا / برلین”) ، انتظار رفتار زیر وجود دارد:

>>> a = ZoneInfo(“Europe/Berlin”)

>>> b = pickle.loads(europe_berlin_pkl)

>>> a is b

True

ZoneInfo.from_file(fobj, /, key=None):

وقتی از یک فایل ساخته می شود ، شی ZoneInfo یک استثنا در مورد ذخیره سازی ایجاد می کند. اگر کاربر نهایی بخواهد ZoneInfo ساخته شده از یک فایل را ذخیره سازی کند ، توصیه می شود که آنها از یک نوع بسته بندی یا یک تابع کد گزاری شده سفارشی استفاده کنند: یا کد گزاری با کلید یا ذخیره سازی محتویات فایل و کد گزاری آن.

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

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

 

 

zoneinfo.avaiable_timezones ()

مجموعه ای حاوی تمام  keyهای معتبر برای مناطق زمانی IANA را که در هر مسیر منطقه زمانی موجود است ، می‌توانید تهیه کنید.

این در هر تماس با عملکرد دوباره محاسبه می شود.

این تابع صرفا شامل ناحیه‌های متعارف می شود و مناطق ویژه در زیر مجموعه  posix  / و right/ directories یا posixrules را در بر نمی گیرد.

احتیاط: این عملکرد ممکن است تعداد زیادی پرونده را باز کند ، زیرا بهترین راه برای تعیین اینکه آیا فایلی در مسیر منطقه زمانی یک منطقه زمانی معتبر است ، خواندن ” magic string ” در ابتدا است.

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

zoneinfo.reset_tzpath(to=None)

مسیر جستجوی منطقه زمانی (TZPATH) را برای ماژول تنظیم یا بازنشانی می کند. وقتی بدون استدلال فراخوانی می شود ، TZPATH روی مقدار پیش فرض تنظیم می شود.

هنگامی که بدون آرگومان نامیده است ، TZPATH  به مقدار پیش فرض تنظیم شده است.

با فراخوانی reset_tzpath حافظه پنهان ZoneInfo باطل نمی شود ، بنابراین تماس با سازنده اصلی ZoneInfo فقط در صورت از دست دادن حافظه نهان ، از TZPATH جدید استفاده می کند.

پارامتر to باید دنباله ای از رشته ها یا os.PathLike باشد و نه یک رشته ، که همه آنها باید مسیرهای مطلق باشند.

اگر چیزی غیر از یک مسیر مطلق طی شود ValueError مطرح خواهد شد.

Globals

zoneinfo.TZ

یک توالی فقط خواندنی که نشان دهنده مسیر جستجوی منطقه زمانی است – هنگام ساخت ZoneInfo از یک key ، یک key به هر ورودی در TZPATH متصل می شود و از اولین پرونده پیدا شده استفاده می شود.

TZPATH صرف نظر از نحوه پیکربندی ممکن است فقط شامل مسیرهای مطلق باشد ، و نه مسیرهای نسبی.

شیئی که zoneinfo.TZPATH به آن اشاره دارد ممکن است در پاسخ به فراخوانی برای reset_tzpath()  تغییر کند ، بنابراین توصیه می شود به جای وارد کردن TZPATH از zoneinfo یا اختصاص متغیر طولانی مدت به zoneinfo.TZPATH ، از zoneinfo.TZPATH استفاده کنید.

برای کسب اطلاعات بیشتر در مورد پیکربندی مسیر جستجوی منطقه زمانی ، به منابع پیکربندی داده مراجعه کنید.

استثنا ها و هشدار ها

استثنا

zoneinfo.ZoneInfoNotFoundError

وقتی ساخت یک شی ZoneInfo شکست میخورد به این دلیل است که کلید مشخص شده در سیستم یافت نمی‌شود. این زیر کلاسی از KeyError است.

استثنا zoneinfo.InvalidTZPathWarning

وقتی PYTHONTZPATH شامل یک مولفه نامعتبر است که فیلتر می شود ، مانند یک مسیر نسبی ، بزرگ شده است.

با تشکر از همراهیتان

مقالات بیشتر:

دانلود ویدیو از یوتیوب با پایتون!! ( pytube )

راهنمای سریع Numpy

برای اطلاعات بیشتر میتوانید به سایت docs.python.org مراجعه کنید.

محمد مهدی عینی

17 مطلب منتشر شده

محمدمهدی عینی ، علاقه مند به برنامه نویسی و علوم کامپیوتری ، برنامه نویس زبان برنامه نویسی پایتون ، مدرس برنامه نویسی GUI تحت ویندوز ، دانش آموز دبیرستان استعداد های درخشان باهنر 1

درباره این مطلب نظر دهید !

مطالب پرمخاطب پایتونی ها

Keras-or-PyTorch

PyTorch و Keras

5
دقیـقه مطالعه
ادامه ...

محصولات فروش پایتونی ها

%60
تخفیف

آموزش فیگما (Figma)

30,000 تومان
3
%69
تخفیف

آموزش برنامه نویسی پایتون

35,000 تومان
2