কেবলমাত্র ব্যবহার করুন date
এবং নির্ভরযোগ্য সেকেন্ড:
আপনি যথাযথভাবে উল্লেখ করেছেন যে আপনি যদি ইংরাজী সময় গাণিতিকের উপর নির্ভর করেন তবে অন্তর্নিহিত গণনা সম্পর্কে প্রচুর বিবরণ গোপন রয়েছে। যেমন -d yesterday
, এবং-d 1 day ago
অন্যরকম আচরণ করবে।
পরিবর্তে, আপনি নির্ভরযোগ্যভাবে নির্ভর করতে পারেন (অবিকল ডকুমেন্টেড) সেকেন্ডের উপর থেকে ইউনিক্সের সূত্রপাত ইউটিসি, এবং বাশ পাটিগণিত যে মুহুর্তটি আপনি চান তা পাওয়ার জন্য:
date -d @$(( $(date +"%s") - 24*3600)) +"%Y-%m-%d"
এটি অন্য উত্তরে নির্দেশিত হয়েছিল । এই ফর্মটি বিভিন্ন date
কমান্ড লাইন পতাকাযুক্ত প্ল্যাটফর্মগুলিতে আরও বহনযোগ্য , ভাষা-স্বতন্ত্র (যেমন "গতকাল" ফরাসী স্থানীয় ভাষায় "বনাম" হায়ার ")) এবং খোলামেলাভাবে (দীর্ঘমেয়াদে) মনে রাখা সহজ হবে, কারণ ভাল, আপনি এটি ইতিমধ্যে জানুন। আপনি অন্যথায় নিজেকে জিজ্ঞাসা করতেই পারেন: "এটি -d 2 hours ago
নাকি -d 2 hour ago
আবার ছিল?" বা "এটি -d yesterday
নাকি -d 1 day ago
আমি চাই?") এখানে শুধুমাত্র জটিল বিট @
।
বাশ দিয়ে সজ্জিত এবং অন্য কিছুই:
কেবলমাত্র ব্যাশে বাশ, আপনি প্রিন্টফ বিল্টিনের মাধ্যমেও গতকাল সময় পেতে পারেন:
%(datefmt)T
causes printf to output the date-time string resulting from using
datefmt as a format string for strftime(3). The corresponding argu‐
ment is an integer representing the number of seconds since the
epoch. Two special argument values may be used: -1 represents the
current time, and -2 represents the time the shell was invoked.
If no argument is specified, conversion behaves as if -1 had
been given.
This is an exception to the usual printf behavior.
সুতরাং,
# inner printf gets you the current unix time in seconds
# outer printf spits it out according to the format
printf "%(%Y-%m-%d)T\n" $(( $(printf "%(%s)T" -1) - 24*3600 ))
বা, সমানভাবে একটি টেম্প ভেরিয়েবলের সাথে (বহিরাগত সাবশেল optionচ্ছিক, তবে পরিবেশের ভারগুলি পরিষ্কার রাখে)।
(
now=$(printf "%(%s)T" -1);
printf "%(%Y-%m-%d)T\n" $((now - 24*3600));
)
দ্রষ্টব্য: ম্যানপেজটি উল্লেখ করেও যে বিন্যাসটির কোনও যুক্তি %()T
ডিফল্ট হিসাবে ধরে নিবে না -1
, তার পরিবর্তে আমি 0 পেয়ে যাব বলে মনে করি (আপনাকে ধন্যবাদ, bash ম্যানুয়াল সংস্করণ 4.3.48)