এই 2 তারিখের আদেশগুলি কেন বিভিন্ন ফলাফল দিচ্ছে?


9
$ date -d "Apr 1 2016 - 1 month" +%B

আমাকে "মার্চ" দেয়, যা দুর্দান্ত - এপ্রিলের আগে যে মাসটি আসে সে মার্চ হয়। তবে আমি যদি এটি করি:

$ date -d "$(date -d "Apr 1 2016") - 1 month" +%B

এটি আমাকে "ফেব্রুয়ারী" দেয়। এটি আমার কাছে থাকা আরও কিছু জটিল কোডে একটি বাগ তৈরি করছে। কেন এই 2 টি কমান্ড বিভিন্ন ফলাফল দেখাচ্ছে?


দু'জনেই আমাকে দিয়েছেনMarch
cuonglm

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

উত্তর:


11

শেল ট্রেসটি চালু করে আপনি সমস্যাটি দেখতে পাচ্ছেন:

+ date -d 'Apr 1 2016 - 1 month' +%B
March
++ date -d 'Apr 1 2016'
+ date -d 'Fri Apr  1 00:00:00 EDT 2016 - 1 month' +%B
February

আপনি যখন অভ্যন্তরীণ dateকমান্ডের আউটপুট ব্যবহার করেন , এটি এপ্রিলের একেবারে শুরুতে হয় এবং EST / EDT পরিবর্তনের কারণে একটি মাস বিয়োগ করার সময় বিচ্ছিন্নতার দিকে চলে যায়:

+ date -d 'Fri Apr  1 00:00:00 EDT 2016 - 1 month'
Mon Feb 29 23:00:00 EST 2016

আপনার ফলাফলগুলি অবশ্যই আপনার স্থানীয় সময় অঞ্চল সেটিংস অনুযায়ী পৃথক হবে। ট্রেসটি চালু করা টাইমজোনটি দেখায় (আমার ক্ষেত্রে, EDT)।

ফলাফলগুলি পৃথক হওয়ার কারণটি হ'ল পরবর্তী ক্ষেত্রে আপনি আরও বেশি তথ্য দিয়েছেন date, এর প্যারামিটারটিকে আরও সুনির্দিষ্ট করেছেন , অর্থাত্ দিনের নির্দিষ্ট সময়। প্রথম অংশে, এটি নির্দিষ্ট করা হয়নি, প্রদর্শিত dateহওয়ার তারিখ / সময় কীভাবে নির্ধারণ করা যায় সে সম্পর্কে আরও অবকাশ দেওয়া।


আমি এখন বুঝতে পেরেছি যে এটি দিবালোকের সঞ্চয়ী সময়গুলির সাথে আমার সম্পর্কযুক্ত (আমার এখানে রয়েছে: সময় ও তারিখ / সময় / জোন / কানাডা / এডমন্টন ), তবে এখনও আমি অনুসরণ করছি না কেন তারিখ কমান্ড একই তারিখের আলাদাভাবে ব্যাখ্যা করে বলে মনে হচ্ছে? মূল শেলের চেয়ে একটি সাবশেলে in যদি আমি এর সাথে স্ক্রিপ্ট চালায় date -d "Apr 1 2016"; date -d "$(date -d "Apr 1 2016")":, একই টাইমজোন ট্যাগ সহ আমি ঠিক একই ফল পেয়েছি - কেন উভয়ই আলাদা ফলাফল দেওয়ার থেকে এক মাস অপসারণ করছে?
তাল

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