خاستگاه زمان یونیکس
برای درک واقعی زمانمهر epoch که اغلب زمان یونیکس، زمان POSIX یا صرفاً epoch نامیده میشود، باید به خاستگاه سیستمعامل یونیکس در اوایل دهه ۱۹۷۰ برگردیم. زمان یونیکس سامانه ردیابی زمان بهصورت مجموع در حال اجرای ثانیه است. مشخصاً تعداد ثانیههای سپریشده از epoch یونیکس را نشان میدهد. خود epoch بهصورت ۰۰:۰۰:۰۰ زمان هماهنگ جهانی (UTC) در پنجشنبه ۱ ژانویه ۱۹۷۰ تعریف شده است.
وقتی کن تامپسون و دنیس ریچی نخستین نسخههای یونیکس را در آزمایشگاه بل میساختند، راه ساده و کارآمدی برای نمایش و ذخیره تاریخ و زمان لازم داشتند. تاریخ خوانای انسان (مثل «۲۹ ژوئیه ۲۰۲۶») برای رایانه بسیار پیچیده است: ماه نامنظم (۲۸، ۲۹، ۳۰ یا ۳۱ روز)، سال کبیسه، منطقه زمانی و گذار ساعت تابستانی. با نمایش زمان بهصورت یک عدد صحیح پیوسته افزایشی، توسعهدهندگان یونیکس استاندارد زمانی جهانی و بدون ابهام ساختند که بهراحتی ذخیره، مقایسه و ریاضی دستکاری شود.
چرا توسعهدهندگان امروز از زمانمهر Epoch استفاده میکنند
حتی دههها بعد، زمان epoch ستون فقرات زیرساخت رایانش مدرن است. دلایل پذیرش جهانی:
- سادگی و کارایی: ذخیره عدد صحیح ۳۲بیتی یا ۶۴بیتی بهمراتب کمتر از رشته تاریخ قالبشده جا و حافظه میگیرد. وقتی پایگاه میلیاردها رکورد دارد، ذخیره چند بایت در هر ردیف هزینه ذخیره را بهشدت کم و عملکرد نمایه را بهتر میکند.
- مستقل از منطقه زمانی: زمانمهر epoch ذاتاً به UTC گره خورده و به مکان فیزیکی کاربر اهمیت نمیدهد. وقتی سرور توکیو با کلاینت نیویورک حرف میزند، ارسال عدد صحیح epoch سردرگمی منطقه زمانی را حذف میکند. کلاینت عدد را هنگام دریافت به منطقه محلی تبدیل میکند.
- عملیات ریاضی آسان: محاسبه مدت بین دو رویداد بهسادگی تفریق یک زمانمهر از دیگری است. برای دانستن ثانیههای بین دو ورودی لاگ،
timestamp2 - timestamp1پاسخ دقیق را فوری میدهد بدون منطق پیچیده تجزیه تاریخ. - مرتبسازی پایگاه داده: مرتبسازی زمانی رکورد با ستون عدد صحیح برای موتور پایگاه بهمراتب سریعتر از تجزیه و مرتبسازی رشته زمانمهر متنی است.
تأثیر ثانیه کبیسه
یک نکته فنی زمان یونیکس نحوه برخورد با ثانیه کبیسه است. ثانیه کبیسه تنظیم یکثانیهای است که گاه به زمان هماهنگ جهانی (UTC) اعمال میشود تا زمان روز نزدیک زمان خورشیدی میانگین بماند. جالب اینکه زمان یونیکس ثانیه کبیسه را حساب نمیکند. در سامانه زمان یونیکس هر روز دقیقاً ۸۶۴۰۰ ثانیه فرض میشود. وقتی ثانیه کبیسه رخ میدهد، ساعت یونیکس اساساً همان ثانیه را دو بار تکرار میکند. این انتخاب عمدی از غیرقابلپیشبینی شدن زمانمهر جلوگیری میکند، هرچند یعنی زمان یونیکس معیار خطی سخت زمان فیزیکی سپریشده از ۱۹۷۰ نیست. برای اکثر کاربرد مهندسی نرمافزار این اختلاف جزئی کاملاً پذیرفتنی و بر پیچیدگی ردیابی هر ثانیه کبیسه تاریخی ترجیح دارد.