بخشی از مقاله
خلاصه
در آستانه شروع قرن جدید میلادی و نزدیک شدن به سال 2000 میلادی یکی از بزرگترین بحرانها و دغدغههای دنیای نرم افزار شکل گرفت. این مشکل آنچنان بزرگ بود که کشورهای جهان بودجههای چندین میلیون دلاری جهت بررسی و رفع مشکل اختصاص دادند. تاریخ هجری شمسی تا چند سال دیگر وارد قرن جدید، یعنی سال 1400 خواهد شد. در بسیاری از نرم افزارهای فارسی و بانکهای اطلاعاتی برای جستجوی آسانتر و عدم تبدیل مکرر تاریخ میلادی به شمسی و بالعکس، سال مربوط به تاریخ شمسی به صورت خلاصه دو رقمی ذخیره میشود. این مسئله مشکلاتی را در این نرم افزارها بوجود میآورد که ما در این مقاله سعی به بررسی آنها و سپس ارائه پیشنهاداتی در رابطه با حل این مشکلات میپردازیم.
کلمات کلیدی: خطای هزاره شمسی، نقص نرم افزاری، نرم افزارهای بومی، تاریخ هجری شمسی
.1 مقدمه
در حال حاضر تقویم رسمی کشورهای ایران و افغانستان فقط با تفاوت اسامی ماهها از هر جهت گاهشماری یکسان به حساب میآیند. در ایران از نامهای فارسی میانه ماهها و در افغانستان از نامهای عربی صورتهای فلکی منطقهالبروج استفاده میشود.در کشور ایران گاهشماری هجری خورشیدی، بر اساس مبانی گاهشماری جلالی و پس از تغییراتی در گاهشماری جلالی در قالب گاهشماری هجری خورشیدی برجی در سال 1289 خورشیدی برای امور مالی کشور رسمیت یافت. سپس با تغییراتی در عناوین ماهها و تعدیل آنها در آخرین روزهای سال 1303 و اولین روزهای سال 1304 ش، نمایندگان پنجمین دوره مجلس شورای ملی گاهشماری هجری شمسی کنونی ایران را تصویب کردند. بر اساس این قانون استفاده از گاهشماری هجری شمسی با مبدأ هجرت پیامبر اسلام از مکه به مدینه و با طول سال شمسی و با نام ماههای فارسی میانه مورد استفاده قرار گرفت .[1]
در کشور افغانستان نیز در سال 1377، گاهشماری هجری شمسی افغانستان، بین گاهشماری پیشین و گاهشماری هجری شمسی رایج در ایران یکسانسازیهایی صورت دادند و آرایش تعداد روزهای سال همانند گاهشماری هجری شمسی ایران شد .[2]صرفاً تغییر قرن مسئلهای نیست و پیش از این چنین اتفاق افتاد تا به اینکه به قرن فعلی رسیدیم. تفاوت در آن است که ما امروزه اغلب برای تمامی کارها به سیستمهای کامپیوتری و نرم افزارها نیازمندیم. مشکل خطای هزاره تاریخ شمسی اگرچه در سخت افزار یا حتی سیستم عامل کامپیوترها مشکلی ایجاد نمیکند اما مشکلی بسیار جدی در نرم افزارهای مالی و اداری و هر نرم افزار دیگری است که تاریخ شمسی در آن کاربرد دارد، بوجود میآورد.
و این مشکل ممکن است درابتدای اجرای یک نرم افزار باشد، دقیقاً زمانی که نرم افزار، تاریخ روز را محاسبه و نمایش دهد یک مشکل نرم افزاری پیش آمده و نرم افزار اجرا نشود.هنوز چند سالی تا سال 1400 هجری شمسی فرصت باقی هست. همه ما درباره خطای هزاره سال 2000 میلادی تا حدودی حضور ذهن داریم، با توجه به این تجربه و نرم افزاری شدن انواع فرآیندها در سازمان ها، می توان این سوال را پرسید که آیا اول فروردین سال 1400 یک روز مسئله آفرین نرمافزاری خواهد بود؟ بی شک میتواند این چنین باشد و مشکلاتی رخ دهد. ولی پیشگیریها و دقت عمل متخصصان میتواند از وقوع مشکلات جلوگیری کند، البتهاحتمالاً نه چندان ساده و نه کم هزینه.در ادامه معرفی دقیقتری از مشکل خطای هزاره شمسی ارائه میشود و سپس به مسائل مرتبط و ارائه راهکار برای حل و پیشگیری میپردازیم.
.2 مروری برپیشینه
مشکل سال 2000 و باگ Millennium که به مشکل هزاره معروف شده بود از اینجا نشأت گرفت که،سابقاً طراحان نرم افزار و برنامه نویسان عادت داشتند تا از یک عدد دو رقمی برای نمایش تاریخ در نرم افزارهای خود استفاده کنند [3]مثلاً. برای نمایش 1998 از 98 استفاده میکردند. و با همین روش اطلاعات ارزشمند در کامپیوترها ذخیره شده بود. به همین علت کامپیوترها در آغاز سال 2000 قادر نبودند تشخیص بدهند که منظور از "00" سال 1900 است یا 2000 و اغلب با 1900 اشتباه میکردند. کبیسه بودن سال [4] 2000 نیز به این مشکل افزود، چراکه برخی نرم افزارها این روز اضافه را نیز در نظر نگرفته بودند.
بر اساس گزارشات هزینه برطرف کردن این مشکل و اصلاح آن - چهار رقمی کردن عدد نمایش دهنده تاریخ - بالغ بر 300 میلیارد دلار بوده است .[6],[5] و این به معنای رخداد یک فاجعه در دنیای نرم افزار میباشد. این مشکل باگ هزاره یا به اختصار Y2K نامیده شد و در بسیاری از نرم افزارها و حتی در برخی از نرم افزاری BIOS مادربردها وجود داشت که در شروع هزاره جدید، تاریخ به سال 1900 باز میگشت. این مشکل زمانی پیچیدهتر شده بود که مشخص شد در بسیاری از نرم افزارها یا سخت افزارها حتی حافظه لازم برای نگهداری یا اضافه کردن دو رقم اول - یعنی قرن - وجود ندارد. قابل پیش بینی بود که چنین مشکلی میتواند باعث خطا در بسیاری از نرم افزارها و کار افتادن کامپیوترها شود. به هر حال پس از صرف میلیاردها دلار و ساعتها بررسی و اصلاحات نرمافزاری و سخت افزاری Y2K بدون مشکل جدی سپری شد.
همچنین طبق بررسیهای صورت گرفته مشخص شد که سیستمهای کامپیوتری 32 بیتی در صورتی که تا چند سال آینده یعنی سال 2038 استفاده شوند نیز دچار بحران جدید بنام YK-2038 خواهند شد [7] و .[8] چراکه در این سیستمها برای ذخیرهسازی تاریخ به همراه زمان از اعداد صحیح 32 بیتی استفاده میشود، که بیشترین مقدار قابل ذخیره سازی آن 2147483647 میباشد که معادل تاریخ 19-Jan-2038, 03:14:07 UTC بصورت باینری 01111111 11111111 11111111 11111111 میباشد و تنها یک ثانیه بعد از آن، زمان به تاریخ 13-Dec-1901 20:45:52 UTC که بصورت باینری 10000000 00000000 00000000 00000000 میباشد .[9] البته به نظر میرسد تا چند سال آینده از سیستمهای 32 بیتی استفاده نشود و حتی پس از این سیستم عاملهای 32 بیتی ارائه نگردند، ولی اکثر دستگاههای صنعتی و کارخانجات که مبتنی بر سیستمهای کامپیوتری هستند همچنان از سیستمهای 32 بیتی استفاده میکنند که تغییرات در آنها هزینههای بسیار زیادی را متحمل میگردد.
از آنجاکه ممکن است در زمان طراحی سیستمها بعضی از جوانب از دید انسانی پنهان بماند، به نظر از این دست اشکالات همچنان به شکلهای متفاوتی وجود خواهند داشت.شاید تا حدودی خطای هزاره شمسی زیانهای کمتری داشته باشد، چراکه تنها دو کشور به صورت رسمی از آن استفاده میکنند و دیگر اینکه سخت افزار پایهای اکثر سیستمها با تاریخ شمسی کار نمیکند. البته نباید این مسئله باعث شود ذهن ما صرفاً به نرم افزارها معطوف شود و از سخت افزار غافل شویم، چراکه سیستمهای کامپیوتری مانند انواع دستگاههای تردد، سیستمهای نوبت دهی،کنتورهای الکترونیکی و انواع سخت افزارهای دیگر وجود دارند که اساس عملکرد سخت افزاری آنها بر حسب تاریخ شمسی میباشد.
.3 بیان مسأله
امروزه در کشور ما بسیاری از نرم افزارها و بانکهای اطلاعاتی وجود دارند که از نوع دادهای - DateTime - به عنوان تاریخ یا زمان استفاده میکنند که مشکلی با شروع قرن جدید شمسی ندارد اما چون این نوع داده با فرمت میلادی کار میکنند برخی از طراحان نرم افزار ترجیح میدهند تاریخ شمسی را بصورت خلاصه دو رقمی ذخیره کنند. این مسأله در نرم افزاهایی که از قبل تولید شدهاند بیشتر به چشم میخورد. با توجه به اینکه تاریخ شمسی در چند سال آینده با مشکلی مشابه به مشکل هزاره میلادی روبرو خواهد شد، این موضوع و تهیه راهکار آن دارای اهمیت زیادی خواهد شد. برای مثال در بسیاری از نرم افزارها هنگام دریافت، نمایش و یا هنگام ذخیرهسازی تاریخ شمسی از شکلی مشابه 96/01/01 استفاده میشود.
اما در سال 1400 و بعد از آن این شیوه نمایش و ذخیره تاریخ مشکل ساز خواهد شد، چراکه تاریخ به صورت 00/01/01 خواهد بود که سیستم کامپیوتر نمیداند منظور از "00" به سال 1400 مربوط میشود یا سال 1300 و در صورتی که چنین پیش برویم با سال 1300 اشتباه خواهند گرفت. این مسئله یک مشکل اساسی دیگر خواهد داشت و آن کبیسه نبودن سال 1400 است در صورتی که سال 1300 کبیسه خواهد بود .[10] چراکه نرم افزارها یک روز اضافه برای آن سال در نظر خواهند گرفت در صورتی که اینطور نیست. اگر از همین امروز سعی شود چنین تاریخی که در بسیاری از نرم افزارها بصورت 8 رقمی دریافت میکنند وارد شود به احتمال زیاد با پیام خطا و عدم صحت تاریخ وارده مواجه خواهد شد و یا در زمان عملیات گزارشگیری با مشکلاتی مواجه خواهد شد و خروجی نادرستی را ایجاد میکند.در حالت کلی انواع نقصهایی که در سیستم نرمافزاری دارای خطای هزاره شمسی ممکن است بوجود بیایند به صورت زیر میباشند - شکل : - 1-1 رکوردهای تکراری مشکل ثبت رکوردهای تکراری در یک تاریخ زمانی رخ میدهد که فقط سال مربوط به تاریخ شمسی ذخیره شود و قرن نادیده گرفته شود، که منجر بوجود آمدن چند رکورد مشابه خواهد شد. برای مثال رکوردی که در سال 1360/01/01