তারিখ - 1901 এর আগের বছরগুলিকে অবৈধ হিসাবে বিবেচনা করা হয়


11

আমার সিস্টেমে আমার তারিখ (জিএনইউ কোর্টিল) 7.1 ইনস্টল করা আছে।

আমি যদি 14-ডিসেম্বর-1901 এর আগে তারিখগুলি পরীক্ষা করার চেষ্টা করি তবে আমি একটি "অবৈধ তারিখ" ত্রুটি পেয়েছি। উদাহরণ স্বরূপ,

  $ date -d 1901-12-13
  date: invalid date `1901-12-13'

  $ date -d 1901-12-14
  Sat Dec 14 00:00:00 EST 1901

date1901-এর আগের বছরগুলিকে বৈধ হিসাবে গণ্য করার জন্য ইউটিলিটিটি করার জন্য আমার কী করা উচিত ?

আমি 19-জানুয়ারী -2038-এর পরে তারিখগুলির জন্য একই রকম ত্রুটি পেয়েছি


আমি কোন ত্রুটি প্রাপ্তি। আমি কোর্টিলস 8.10 ব্যবহার করছি, সম্ভবত কোনও পুরানো বাগ?
xenoterracide

@ xenoterracide আপনি কি একটি 64-বিট সিস্টেম?
মাইকেল

@ মাইকেল হ্যাঁ, আমি
xenoterracide

উত্তর:


15

ভাল প্রশ্ন.

ডকুমেন্টেশন এটি অনুমোদিত হবে বলেছেন।

 info date 'Date input formats' 'Calendar date items'

সংখ্যাগত মাসগুলির জন্য, আইএসও 8601 ফর্ম্যাট `YEAR-MONTH-DAY 'অনুমোদিত, যেখানে YEAR কোনও ধনাত্মক সংখ্যা, ...

একটি সংখ্যা দশের চেয়ে কম হলে একটি শীর্ষস্থানীয় শূন্য উপস্থিত থাকতে হবে।

যদি YEAR 68 বা তার চেয়ে কম হয়, তবে 2000 এর সাথে যুক্ত হয়; অন্যথায়, যদি YEAR 100 এর চেয়ে কম হয়, তবে 1900 এতে যুক্ত করা হবে।

আপনি কি 32-বিট সিস্টেমে আছেন?

আপনি কি 2038-01-20-এর পরে তারিখগুলির সাথে ত্রুটি পেয়েছেন, যেমন?

date -d '2038-01-20'

যদি তা হয় তবে মনে হচ্ছে জিএনইউ তারিখটি 32-বিট সময় মান ব্যবহার করছে।

আমি নিশ্চিত আপনি একটি 64-বিট সিস্টেম ব্যবহার অথবা একটি ভিন্ন টুল ব্যবহার করে, উদাহরণস্বরূপ ছাড়া এই অন্য ঠিক করতে পারবো নই তারিখসময় পার্ল অথবা DATETIME পাইথন হবে।

কিছু পটভূমি:

ইউনিক্স বার একটি পূর্ণসংখ্যার মান ব্যবহার করে 1 জানুয়ারি 1970 থেকে সেকেন্ডের সংখ্যা গণনা করে। যদি সিস্টেমটি 32-বিট পূর্ণসংখ্যা ব্যবহার করে তবে এটি কেবল 2.1 বিলিয়ন সেকেন্ড এগিয়ে (2038-01-19 03:14:02 ইউটিসি পর্যন্ত) এবং 2.1 বিলিয়ন সেকেন্ড পিছনে পিছনে (1901-12-13 20:45:52 এ ফিরে) গণনা করতে পারে ইউটিসি).

আরও তথ্য এখানে:


ধন্যবাদ মাইকেল, আমি বিশ্বাস করি যাতে আমি 32 বিট মেশিনে আছি। প্রকৃতপক্ষে, আমি একটি রিমোট সার্ভার কাজ করছি এবং সার্ভার unameএটি কমান্ডের সাথে অনেক তথ্য প্রকাশ করবে না এটি কেবল একটি আই it6 machine মেশিন বলে, যা আমি ধরে নিই যে 32 বিট মেশিন রয়েছে। 2038 সমস্যা হিসাবে, হ্যাঁ, সমস্যাটি রিমোট সার্ভারে রয়েছে। আপনার ইনপুট জন্য আবার ধন্যবাদ! অনেক প্রশংসিত!!
জসদীপ সিং

হ্যাঁ, i686 32-বিট। সাহায্য করে আনন্দ পেলাম. আপনার যদি তার চেয়ে পুরানো তারিখগুলি মোকাবেলায় সহায়তা দরকার হয় তবে আমি প্রস্তাবিত পাইথন এবং পার্ল মডিউলগুলি চেষ্টা করে দেখুন এবং আপনি যদি এটি কাজ না করতে পারেন তবে অন্য একটি প্রশ্ন পোস্ট করুন।
মাইকেল

7

আপনার সিস্টেমটি (বা কমপক্ষে সেই তারিখের সংস্করণ ) সম্ভবত 32-বিট অভ্যন্তরীণ সময় মান ব্যবহার করছে।

ইউনিক্সের যুগ (শূন্য সময়ের মান) হল 1970-01-01 00:00:00 ইউটিসি। এই প্রারম্ভিক পয়েন্টটি 1901-12-13 00:00 EST তে একটি স্বাক্ষরিত 32-বিট সময় মানের সীমার বাইরে রাখে।

1901-12-14 00:00:00 EST হল -2147454000
1901-12-13 15:45:52 EST হল -2147483648 (ওরফে INT_MINসি, ন্যূনতম 32-বিট স্বাক্ষরিত পূর্ণসংখ্যার)
1901-12-13 00:00: # ইএসটি হ'ল -2147540400

আপনি 1901-12-13 15:45:52 EST ব্যবহার করে চেষ্টা করতে পারেন। এটি কাজ করা উচিত, তবে এক সেকেন্ড আগে সম্ভবত 1901-12-13 00:00 এর মতো একইভাবে ব্যর্থ হবে।

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