ইউনিক্স তারিখের সাথে কেন 2 থেকে 3 মাসের মধ্যে পার্থক্য রয়েছে


16

এটি কীভাবে সম্ভব এবং আমি কীভাবে এটি মোকাবেলা করব? আমি ব্যাকআপ স্ক্রিপ্ট তৈরি করছি যা ইউনিক্সের উপর নির্ভরশীল dateএবং একটি আকর্ষণীয় বাগ আবিষ্কার করেছি:

[root@web000c zfs_test]# date +%y-%m-%d --date='2 months ago'
14-04-01
[root@web000c zfs_test]# date +%y-%m-%d --date='3 months ago'
14-02-28
[root@web000c zfs_test]# date
Sun Jun  1 00:08:50 CEST 2014

এটি কি একটি লিপ বছর / ফেব্রুয়ারি 29 বাগ হতে পারে? dateযদিও কোনও সরঞ্জামে অসদৃশ ...
মার্ক হেন্ডারসন

উত্তর:


44

গ্রীষ্মের সময় (দিবালোক সংরক্ষণের সময়) এর কারণে আপনি এই আচরণটি দেখছেন।

কারণ আপনি বর্তমানে গ্রীষ্মের সময়, যেখানে আপনার ঘড়িটি এক ঘন্টা এগিয়ে, আপনি যখন তিন মাস আগে প্রথম জুনের মধ্যরাতের ঠিক পরে জিজ্ঞাসা করেন, তখন সময়টি এক ঘন্টা "আগে" শেষ হয় কারণ গ্রীষ্মের সময় তিনটি ছিল না মাস কতক পূর্বে.

জিএনইউ তারিখ নথিপত্র যথাক্রমে আপেক্ষিক দিন বা মাস জিজ্ঞাসা করার সময়, দুপুর বারোটার 12 এবং মাসের 15 তমকে যথাক্রমে পয়েন্ট হিসাবে ব্যবহার করে কাজ করার পরামর্শ দেয় । উদাহরণ স্বরূপ:

date +%y-%m-%d --date="$(date +%Y-%m-15) -3 month"

ধন্যবাদ. হ্যাঁ, ঠিক "3 মাস আগে" সকাল 01 টা [root@web000c zfs_test]# date +%y-%m-%d --date='3 months ago' 14-03-01 [root@web000c zfs_test]# date Sun Jun 1 01:00:15 CEST 2014
নাগাদ

ডোহ! আমি মনে করি যে আমার কিছু স্ক্রিপ্টগুলি গ্রিপ করার দরকার আছে কারণ আমি সন্দেহ করি যে আমি dateব্যবহারের ক্ষেত্রে এই পরামর্শটি উপেক্ষা করেছি ।
কালেব

14

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

যখন আপনার সিস্টেমটি ডিফল্টরূপে ইউটিসিতে সেট করা থাকে না, তখন টাইমজোনটি পাস করার সহজতম উপায় হ'ল TZপরিবেশের ভেরিয়েবলের সাথে আপনার কমান্ডের উপসর্গ স্থাপন করা । এটি একটি একক কমান্ডে জোন স্যুইচকে সীমাবদ্ধ করে এবং আপনার পরবর্তী কমান্ডগুলিতে ফাঁস হওয়া থেকে পরিবর্তনশীলকে রাখে।

$ NOW=$(date '+%s')
$ date -d @$NOW
Wed Jun 11 23:44:35 EDT 2014
$ TZ=UTC date -d @$NOW
Thu Jun 12 03:44:35 UTC 2014

আপনার যা করা উচিত নয় তা হল TZভেরিয়েবলটি রফতানি করা কারণ এটি সমস্যার সমাধানের জন্য জিনিসগুলিকে খুব বিভ্রান্ত করতে পারে, যেমনটি নিম্নলিখিতটি দেখায়।

$ export TZ=UTC
$ date -d @$NOW
Thu Jun 12 03:44:35 UTC 2014
$ TZ=EDT date -d @$NOW
Thu Jun 12 03:44:35 EDT 2014

-3

এই নির্দিষ্ট বছরে যখন আপনার কম্পিউটার মনে করে যে এটি চালু রয়েছে এবং নির্দিষ্ট তারিখে আপনি "1 মাস আগে, 2 মাস আগে, এবং 3 মাস আগে একটি পরীক্ষার জন্য বেছে নিয়েছিলেন, হ্যাঁ - এটি সম্ভবত 29 শে ফেব্রুয়ারী সনাক্তকরণ always সবসময় নয় একটি ত্রুটি, কিন্তু ..

এখন, আজ 2014-06-01 নয়। আবার চেষ্টা কর. 2013-06-01 এ কম্পিউটারের তারিখ সেট করুন। আবার চেষ্টা কর.
2014-09-01 এ কম্পিউটারের তারিখ সেট করুন। আবার চেষ্টা কর.


6
আপনি যদি আমেরিকান MDYফর্ম্যাটে তারিখগুলি সরবরাহ করেন তবে প্লাস /পৃথক করার জন্য এস ব্যবহার করুন। আরও ভাল, যেমন আমরা এখানে একটি আন্তর্জাতিক সম্প্রদায়, যথাযথ আইএসও তারিখগুলি ব্যবহার করুন 2014-09-01
glglgl
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.