یونکس کے وقت کے بارے میں پروگرامرز کی غلط فہمیاں ہیں۔

معافی چاہتا ہوں پیٹرک میک کینزی.

کل ڈینی میں نے یونکس ٹائم کے بارے میں کچھ دلچسپ حقائق کے بارے میں پوچھا، اور مجھے یاد آیا کہ بعض اوقات یہ مکمل طور پر غیر محسوس طریقے سے کام کرتا ہے۔

یہ تینوں حقائق انتہائی معقول اور منطقی معلوم ہوتے ہیں، کیا وہ نہیں؟

  1. یونکس ٹائم 1 جنوری 1970 00:00:00 UTC سے سیکنڈوں کی تعداد ہے۔
  2. اگر آپ بالکل ایک سیکنڈ انتظار کرتے ہیں، تو یونکس کا وقت بالکل ایک سیکنڈ سے بدل جائے گا۔
  3. یونکس ٹائم کبھی پیچھے کی طرف نہیں جاتا۔

اس میں سے کوئی بھی سچ نہیں ہے۔

لیکن وضاحت کیے بغیر صرف یہ کہنا کافی نہیں ہے کہ "اس میں سے کوئی بھی سچ نہیں ہے"۔ کیوں. وضاحت کے لیے ذیل میں ملاحظہ کریں۔ لیکن اگر آپ اپنے بارے میں سوچنا چاہتے ہیں، تو گھڑی کی تصویر کے پیچھے سے اسکرول نہ کریں!

یونکس کے وقت کے بارے میں پروگرامرز کی غلط فہمیاں ہیں۔
1770 کی دہائی سے ٹیبل کلاک۔ جان لیروکس نے مرتب کیا۔ سے ویلکم کلیکشنز. لائسنس کے تحت شائع ہوا۔ CC BY

تینوں غلط فہمیوں کی ایک وجہ ہے: لیپ سیکنڈ. اگر آپ لیپ سیکنڈ سے واقف نہیں ہیں تو، یہاں ایک فوری حوالہ ہے:

UTC وقت کا تعین دو عوامل سے ہوتا ہے:

  • بین الاقوامی ایٹمی وقت: دنیا بھر میں سینکڑوں ایٹمی گھڑیوں سے اوسط ریڈنگ۔ ہم ایک ایٹم کی برقی مقناطیسی خصوصیات سے دوسرے کی پیمائش کر سکتے ہیں، اور یہ سائنس کے لیے معلوم وقت کی سب سے درست پیمائش ہے۔
  • عالمی وقتاپنے محور کے گرد زمین کی گردش کی بنیاد پر۔ ایک مکمل انقلاب ایک دن ہے۔

مسئلہ یہ ہے کہ یہ دونوں نمبر ہمیشہ مماثل نہیں ہوتے ہیں۔ زمین کی گردش یکساں نہیں ہے - یہ بتدریج کم ہوتی جاتی ہے، اس لیے یونیورسل ٹائم میں دن لمبے ہوتے جاتے ہیں۔ دوسری طرف، ایٹمی گھڑیاں لاکھوں سالوں میں شیطانی طور پر درست اور مستقل ہیں۔

جب دو بار مطابقت پذیری سے باہر ہو جاتے ہیں، تو انہیں دوبارہ مطابقت پذیری میں لانے کے لیے UTC سے ایک سیکنڈ شامل یا ہٹا دیا جاتا ہے۔ 1972 سے سروس IERS (جو اس کیس کو چلاتا ہے) نے 27 اضافی سیکنڈز کا اضافہ کیا۔ نتیجہ 27 UTC دن تھا جس کی مدت 86 سیکنڈ تھی۔ نظریاتی طور پر، 401 سیکنڈ (مائنس ون) کی مدت کے ساتھ ایک دن ممکن ہے۔ دونوں اختیارات یونکس وقت کے بنیادی مفروضے سے متصادم ہیں۔

یونکس ٹائم فرض کرتا ہے کہ ہر دن بغیر کسی اضافی سیکنڈ کے بالکل 86 سیکنڈ (400 × 60 × 60 = 24) چلتا ہے۔ اگر اس طرح کی چھلانگ ہوتی ہے، تو یونکس کا وقت یا تو ایک سیکنڈ چھلانگ لگاتا ہے، یا ایک میں دو سیکنڈ شمار کرتا ہے۔ 86 تک، اس میں 400 لیپ سیکنڈز غائب ہیں۔

لہٰذا ہماری غلط فہمیوں کو مندرجہ ذیل طور پر پورا کرنے کی ضرورت ہے:

  • یونکس ٹائم 1 جنوری 1970 00:00:00 UTC سے سیکنڈوں کی تعداد ہے مائنس لیپ سیکنڈ.
  • اگر آپ بالکل ایک سیکنڈ انتظار کرتے ہیں، تو یونکس کا وقت بالکل ایک سیکنڈ سے بدل جائے گا، جب تک لیپ سیکنڈ کو ہٹا نہیں دیا گیا ہے۔.

    اب تک، عملی طور پر کبھی بھی سیکنڈ کو نہیں ہٹایا گیا ہے (اور زمین کی گردش میں کمی کا مطلب ہے کہ اس کا امکان نہیں ہے)، لیکن اگر کبھی ایسا ہوا تو اس کا مطلب یہ ہوگا کہ UTC دن ایک سیکنڈ چھوٹا ہو جائے گا۔ اس صورت میں، UTC کا آخری سیکنڈ (23:59:59) رد کر دیا جاتا ہے۔

    ہر یونکس دن میں سیکنڈ کی ایک ہی تعداد ہوتی ہے، اس لیے چھوٹے دن کا آخری یونکس سیکنڈ کسی بھی UTC وقت سے مطابقت نہیں رکھتا۔ یہ کیسا لگتا ہے، سہ ماہی سیکنڈ کے وقفوں میں:

    یونکس کے وقت کے بارے میں پروگرامرز کی غلط فہمیاں ہیں۔

    اگر آپ 23:59:58:00 UTC پر شروع کرتے ہیں اور ایک سیکنڈ انتظار کرتے ہیں، تو Unix کا وقت دو UTC سیکنڈ آگے بڑھے گا اور Unix 101 ٹائم اسٹیمپ کسی کو تفویض نہیں کیا جائے گا۔

  • یونکس کا وقت کبھی واپس نہیں جا سکتا، جب تک ایک لیپ سیکنڈ شامل نہ ہو جائے۔.

    عملی طور پر ایسا 27 بار ہو چکا ہے۔ UTC دن کے اختتام پر، 23:59:60 پر ایک اضافی سیکنڈ شامل کیا جاتا ہے۔ یونکس کے پاس ایک دن میں اتنے ہی سیکنڈ ہوتے ہیں، اس لیے یہ ایک اضافی سیکنڈ کا اضافہ نہیں کر سکتا - اس کے بجائے اسے آخری سیکنڈ کے لیے یونکس ٹائم سٹیمپ کو دہرانا پڑتا ہے۔ یہ کیسا لگتا ہے، سہ ماہی سیکنڈ کے وقفوں میں:

    یونکس کے وقت کے بارے میں پروگرامرز کی غلط فہمیاں ہیں۔

    اگر آپ 23:59:60.50 پر شروع کرتے ہیں اور آدھا سیکنڈ انتظار کرتے ہیں تو یونکس کا وقت واپس آتا ہے آدھے سیکنڈ تک، اور یونکس 101 ٹائم اسٹیمپ دو UTC سیکنڈ کے مساوی ہے۔

یہ شاید یونکس کے اوقات کی واحد عجیب و غریب چیزیں نہیں ہیں - بس وہی جو مجھے کل یاد آیا۔

وقت - بہت عجیب بات

ماخذ: www.habr.com

نیا تبصرہ شامل کریں