বাশ - তারিখ, 32 বিট লিনাক্স সিস্টেমে 2038 বাগের চারপাশে কাজ করা


9

আমি একটি সামান্য বাশ স্ক্রিপ্ট লিখেছিলাম যা আমাকে "বছর 2038 বাগ" জুড়ে হোঁচট খেয়েছে । আমি এই সমস্যাটি সম্পর্কে আগে জানতাম না এবং আমার স্ক্রিপ্টটি এই ম্যাজিক তারিখটি গণনা করার চেষ্টা করার সময় --debugআমি যে আউটপুটটি পেয়েছিলাম তা পোস্ট করার সাহস পেয়েছিলাম date(03 জানুয়ারী 2038 তারিখে ইউটিসি)।

date -d "20380119"

date: parsed number part: today/this/now
date: input timezone: +01:00 (set from system default)
date: warning: using midnight as starting time: 00:00:00
date: starting date/time: '(Y-M-D) 2038-01-19 00:00:00 TZ=+01:00'
date: '(Y-M-D) 2038-01-19 00:00:00 TZ=+01:00' = 2147468400 epoch-seconds
date: output timezone: +01:00 (set from system default)
date: final: 2147468400.000000000 (epoch-seconds)
date: final: (Y-M-D) 2038-01-18 23:00:00 (UTC0)
date: final: (Y-M-D) 2038-01-19 00:00:00 (output timezone TZ=+01:00)
Tue Jan 19 00:00:00 CET 2038

date -d "20380119 + 1 days"

date: parsed hybrid part: +1 day(s)
date: input timezone: +01:00 (set from system default)
date: warning: using midnight as starting time: 00:00:00
date: starting date/time: '(Y-M-D) 2038-01-19 00:00:00 TZ=+01:00'
date: warning: when adding relative days, it is recommended to specify 12:00pm
date: error: adding relative date resulted in an invalid date: '(Y-M-D) 2038-01-20 00:00:00 TZ=+01:00'
date: invalid date '20380119 + 1 days'

date -d "20380120" --debug

date: parsed number part: today/this/now
date: input timezone: +01:00 (set from system default)
date: warning: using midnight as starting time: 00:00:00
date: error: invalid date/time value:
date:     user provided time: '(Y-M-D) 2038-01-20 00:00:00 TZ=+01:00'
date:        normalized time: '(Y-M-D) 2038-01-20 00:00:00 TZ=+01:00'
date: 
date:      possible reasons:
date:        numeric values overflow;
date:        missing timezone
date: invalid date '20380120'

dateএই তারিখ জুড়ে জিএনইউ গণনা করার কোনও উপায় আছে কি ?
(একটি লিনাক্স 32 বিট সিস্টেমে)

  Operating System: Debian GNU/Linux buster/sid
            Kernel: Linux 4.12.0-2-686-pae
      Architecture: x86

3
32 বিট সিস্টেমে এটিকে ঘুরে দেখার এক উপায় হ'ল * বিএসডি ওএস।
রুই এফ রিবেইরো


1
@ কুসালানন্দ অস্পষ্ট থাকার জন্য দুঃখিত। হ্যাঁ আমি জিএনইউর জন্য একটি উপায় জিজ্ঞাসা করছি date। আমি আমার প্রশ্নের সম্পাদনা করব ...
নাথ

এফডাব্লুআইডাব্লু, ওপেনবিএসডি 2014 সালে এটি স্থির করেছে । এটি অনেক কাজ ছিল তবে কোনওভাবে তারা প্রাসঙ্গিক সমস্ত বিট প্যাচ করতে সক্ষম হয়েছিল।
সাটস ক্যাটসুর

উত্তর:


14

আপনি যদি date32-বিট লিনাক্সে জিএনইউতে লেগে থাকতে চান তবেcoreutilscoreutils 2038 এর পরে তারিখগুলি নিয়ে কাজ করার কোনও সহজ উপায় নেই The রক্ষণাবেক্ষণকারীরা এটিকে বাগ হিসাবে বিবেচনা করবেন না , সুতরাং সেখানে কোনও স্থির আশা করবেন না - সমাধানটি হবে সি লাইব্রেরি এবং কার্নেল থেকে আসা । আপনি যদি কাজের সাথে অগ্রসর হতে চান তবে আপনার প্রয়োজন:

এবং দক্ষতা এবং ধৈর্য একটি শালীন পরিমাণ।

পথ 2038 উপর আরো 32 বিট লিনাক্স বিশ্বের ঘাঁটা করা পরিকল্পনা ছিল জন্য, দেখুন LWN এবং লেখ-আপ DebConf 17 বছর বয়সে 2038 বিওএফ এর (সেখানে ফলো-আপ মন্তব্যগুলি ও LWN উপর )। এই জানুয়ারী 2019 এলএলডব্লিউএন নিবন্ধে কার্নেলে প্রয়োগ করা হচ্ছে এমন পরিবর্তনগুলি বর্ণনা করা হয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.