Leap year problem
لیپ سال کا مسئلہ (جسے لیپ سال بگ یا لیپ ڈے بگ بھی کہا جاتا ہے) ڈیجیٹل (کمپیوٹر سے متعلق) اور غیر ڈیجیٹل دستاویزات اور ڈیٹا اسٹوریج کے حالات دونوں کے لیے ایک مسئلہ ہے جو اس حساب میں غلطیوں کے نتیجے میں ہوتا ہے کہ کون سے سال لیپ سال ہیں، یا لیپ سال اور عام سالوں کے درمیان فرق کی پرواہ کیے بغیر تاریخوں میں ہیرا پھیری سے۔ زمرہ جات لیپ سال کیڑے عام طور پر دو زمروں میں آتے ہیں، جو ان کے حقیقی دنیا کے استعمال میں پڑنے والے اثرات کی بنیاد پر ہوتے ہیں: وہ جو غلطی کے حالات کا باعث بنتے ہیں، جیسے مستثنیات، ایرر ریٹرن کوڈز، غیر ابتدائی متغیرات، یا لامتناہی لوپس وہ جو غلط ڈیٹا کا باعث بنتے ہیں، جیسے کہ رینج کے سوالات یا جمع کرنے میں آف-بائی-ون مسائل مثال کے طور پر پائیتھن درج ذیل پائیتھن کوڈ زمرہ 1 لیپ سال کی بگ کی ایک مثال ہے۔ یہ آج 29 فروری ہونے تک ٹھیک سے کام کرے گا۔ پھر، یہ ایک عام سال کا 29 فروری بنانے کی کوشش کرے گا، جو موجود نہیں ہے۔ ڈیٹ کنسٹرکٹر "دن مہینے کے لیے حد سے باہر ہے" کے پیغام کے ساتھ ویلیو ایرر اٹھائے گا۔ ڈیٹ ٹائم درآمد کی تاریخ سے آج = date.today () بعد میں = today.replace (سال = today.year + 1) ونڈوز C + + مندرجہ ذیل ونڈوز C + + کوڈ زمرہ 1 لیپ سال بگ کی ایک مثال ہے۔ یہ اس وقت تک صحیح طریقے سے کام کرے گا جب تک کہ موجودہ تاریخ لیپ سال کی 29 فروری نہ ہو جائے۔ پھر، یہ ایک عام سال کے 29 فروری کی نمائندگی کرنے کے لیے ایس ٹی میں ترمیم کرے گا، ایک ایسی تاریخ جو اصل میں موجود نہیں ہے۔ کسی بھی فنکشن کو ایس ٹی پاس کرنا جو سسٹم ڈھانچے کو پیرامیٹر کے طور پر قبول کرتا ہے ممکنہ طور پر ناکام ہو جائے گا۔ مثال کے طور پر، یہاں دکھائی گئی سسٹم ٹائم ٹو فائل ٹائم کال ایک ایرر کوڈ واپس کرے گی۔ چونکہ اس واپسی کی قیمت غیر چیک شدہ ہے (جو کہ انتہائی عام ہے)، اس کے نتیجے میں فٹ کو غیر شروع شدہ چھوڑ دیا جائے گا۔ سسٹم سینٹ ؛ فائل ٹائم فٹ ؛ گیٹ سسٹم ٹائم (& st) ؛ st.wYear + + ؛ سسٹم ٹائم ٹو فائل ٹائم (& st, & ft) ؛ مائیکروسافٹ C #درج ذیل. NET C #کوڈ زمرہ 1 لیپ سال بگ کی ایک مثال ہے۔ یہ 29 فروری تک صحیح طریقے سے کام کرے گا۔ پھر، یہ ایک عام سال کا 29 فروری بنانے کی کوشش کرے گا، جو موجود نہیں ہے۔ ڈیٹ ٹائم کنسٹرکٹر ArgumentOutOfRangeExसेपشن دے گا۔ ڈیٹ ٹائم ڈی ٹی = DateTime.Now ؛ ڈیٹ ٹائم کا نتیجہ = نیا ڈیٹ ٹائم (dt.Year + 1، dt.Month، dt.Day) ؛ جاوا اسکرپٹ مندرجہ ذیل جاوا اسکرپٹ کوڈ زمرہ 2 لیپ سال بگ کی ایک مثال ہے۔ یہ 29 فروری تک ٹھیک سے کام کرے گا، جیسے کہ 2020-02-29 پر۔ پھر یہ سال 2021 مقرر کرنے کی کوشش کرے گا۔ چونکہ 2021-02-29 موجود نہیں ہے، اس لیے ڈیٹ آبجیکٹ اگلی درست تاریخ پر آگے بڑھے گا، جو کہ 2021-03-01 ہے۔ ور ڈی ٹی = نئی تاریخ () ؛ dt.setFullYear (dt.getFullYear () + 1) ؛ برا لیپ سال الگورتھم (بہت سی زبانیں) درج ذیل کوڈ لیپ سال بگ کی ایک مثال ہے جو بہت سی زبانوں میں دیکھا جاتا ہے۔ یہ یا تو زمرہ 1 یا زمرہ 2 کے اثر کا سبب بن سکتا ہے، اس پر منحصر ہے کہ نتیجہ کس چیز کے لیے استعمال ہوتا ہے۔ یہ غلط طور پر فرض کرتا ہے کہ لیپ سال بالکل ہر چار سال بعد آتا ہے۔ بول لیپ سال = سال% 4 = = 0 ہے ؛ لیپ سال الگورتھم میں درست لیپ سال الگورتھم کی وضاحت کی گئی ہے۔ مائیکروسافٹ ایکسل نے اپنے ابتدائی ورژن کے بعد سے، 1900 کو غلط طور پر لیپ سال سمجھا ہے، اور اسی وجہ سے 29 فروری اسی سال 28 فروری اور 1 مارچ کے درمیان آتا ہے۔ یہ بگ لوٹس 1-2-3 سے شروع ہوا، اور بیک ورڈ مطابقت کے مقصد سے ایکسل میں جان بوجھ کر لاگو کیا گیا تھا۔ مائیکروسافٹ نے اس بگ کے بارے میں ایک مضمون لکھا ہے، جس میں 1900 کو لیپ سال سمجھنے کی وجوہات بیان کی گئی ہیں۔ اس بگ کو ایکما آفس اوپن ایکس ایم ایل (او او ایکس ایم ایل) تفصیلات میں ایک ضرورت کے طور پر فروغ دیا گیا ہے۔ 1996 میں، 31 دسمبر کو، توائی پوائنٹ، نیوزی لینڈ اور بیل بے، تسمانیا، آسٹریلیا کے دو ایلومینیم سمیلٹنگ پلانٹس میں، سمیلٹنگ پاٹ لائنز کو کنٹرول کرنے والے 660 کمپیوٹرز میں سے ہر ایک آدھی رات کو بند ہو گیا کیونکہ کمپیوٹرز کو سال کے 366 ویں دن کو سنبھالنے کے لیے پروگرام نہیں کیا گیا تھا۔ مرمت کے اخراجات کا تخمینہ اس سے زیادہ لگایا گیا تھا۔ 2000 میں، 31 دسمبر کو ناروے میں قومی ریلوے کمپنی وائی نے دریافت کیا کہ اس کی تمام 29 نئی سگنیٹور ٹرینیں چلانے میں ناکام رہیں کیونکہ ان کے آن بورڈ کمپیوٹرز نے اس تاریخ کو سال کے 366 ویں دن کے طور پر تسلیم نہیں کیا تھا۔ ایک عبوری اقدام کے طور پر، انجینئروں نے اپنی گھڑیوں کو ایک ماہ کے لیے دوبارہ ترتیب دے کر ٹرینیں دوبارہ شروع کیں۔ 31 دسمبر 2008 کی آدھی رات کو پہلی نسل کے بہت سے زون 30 ماڈل منجمد ہو گئے۔ مائیکروسافٹ نے کہا کہ یہ مسئلہ فری اسکیل کے لکھے ہوئے اندرونی گھڑی ڈرائیور اور ڈیوائس کے لیپ سال کو سنبھالنے کے طریقے کی وجہ سے ہوا ہے۔ اس نے 24 گھنٹے بعد خود بخود خود کو ٹھیک کر لیا، لیکن جو لوگ انتظار نہیں کرنا چاہتے تھے ان کے لیے ایک درمیانی "فکس" ڈیوائس کی بیٹری کو نکالنا اور پھر یکم جنوری 2009 کو دوپہر یو ٹی سی کے بعد ری چارج کرنا تھا۔ سونی کے پلے اسٹیشن 3 نے 2010 کو غلط طور پر لیپ سال قرار دیا، اس لیے غیر موجود 29 فروری 2010 کو یکم مارچ 2010 کو دکھایا گیا، اور اس کی وجہ سے پروگرام میں غلطی ہوئی۔ 2012 میں، ٹام ٹام سیٹلائٹ نیویگیشن ڈیوائسز ایک لیپ ایئر بگ کی وجہ سے خراب ہوگئے جو پہلی بار 31 مارچ کو سامنے آیا تھا۔ 2012 میں، جی میل کی چیٹ ہسٹری نے 29 فروری کو محفوظ کردہ تمام چیٹس کے لیے 31 دسمبر 1969 کی تاریخ دکھائی۔ 2012 میں، مائیکروسافٹ ایزور کو 28 فروری کو لیپ ایئر بگ نے آف لائن کر دیا تھا۔ 5: 45 بجے پی ایس ٹی پر ونڈوز ایزور ٹیم کو ایک مسئلے کا علم ہوا، بظاہر اس کی وجہ وقت کا حساب تھا جو لیپ سال کے لیے غلط تھا۔ 2016 میں، لیپ سال کیڑے کی ایک بڑی تعداد کو ویب سائٹ کوڈ آف میٹ پر 2016 لیپ ڈے کیڑے کی فہرست میں درج کیا گیا تھا۔ 2016 میں، 29 فروری کو ڈسلڈورف ہوائی اڈے پر سامان کنویئر سسٹم میں لیپ ایئر بگ کی وجہ سے سامان کے 1,200 سے زیادہ ٹکڑے اپنی پروازیں چھوٹ گئے۔ 2020 میں لیپ سال کیڑے کی ایک بڑی تعداد کو ویب سائٹ کوڈ آف میٹ پر 2020 لیپ ڈے کیڑے کی فہرست میں درج کیا گیا تھا۔ ٹائم فارمیٹنگ اور اسٹوریج کیڑے سال 2100 مسئلہ حوالہ جات ٹائم فارمیٹنگ اور اسٹوریج کیڑے کیلنڈر سافٹ ویئر کیڑے ٹیکنالوجی کے خطرات بھی دیکھیں۔