বাশে তারিখটি (বর্তমান সময়ের এক দিন আগে) পান


171

বাশে বর্তমান সময়ের আগের একদিনের তারিখটি আমি কীভাবে মুদ্রণ করতে পারি?


চেষ্টা করা তারিখ কিন্তু মনে হচ্ছে সোলারিস 10 এর বাশ
কোনও সুইড নেই

আমি সানফ্রিওয়্যার থেকে gnu তারিখ (কোর্টিল প্যাকেজ) ইনস্টল করে আরও একটি দুর্দান্ত সমাধান পেয়েছি।
কনডেন্ডার


--dateবা -dবিকল্পটি কেবল জিএনইউ তারিখে উপলভ্য
ক্রিস এফএ জনসন

এই প্রশ্নের একটি ডিএসটি-নিরাপদ সংস্করণের জন্য stackoverflow.com/q/15374752/462865 দেখুন ।
আমির আলী আকবরী

উত্তর:


262

আপনার যদি জিএনইউ তারিখ থাকে এবং আমি আপনাকে সঠিকভাবে বুঝতে পারি

$ date +%Y:%m:%d -d "yesterday"
2009:11:09

অথবা

$ date +%Y:%m:%d -d "1 day ago"
2009:11:09

1
আমি বেশিরভাগই প্রস্তাবিত উত্তর হিসাবে পেয়েছি তবে
-ডি

3
তারিখ ফাংশন সহ উবুন্টু ব্যবহারের জন্য: $ (তারিখ +% Y:% মি:% d -d "1 দিন আগে"), আউটপুট: 2013: 04: 21। এবং আপনি যদি 10 দিন আগে তারিখটি চান, আপনি $ (তারিখ +% Y:% মি:% d -d "10 দিন আগে") বা $ (তারিখ +% ওয়াই:% মি:% ডি-ডি "10 ব্যবহার করতে পারেন দিন আগে ")
zhihong

OS X এর উপর আপনি চোলাই মাধ্যমে coreutils ইনস্টল করতে পারেন: দেখুন stackoverflow.com/questions/15374752/...
kasterma

11
date -v-1dওএসএক্স (বিয়োগ), -v+1d(আরও)
বিগস

2
এই ব্যাশ ফাংশনটি লিনাক্স এবং ওএসএক্স উভয় ক্ষেত্রেই কাজ করবে। মূলত এটি প্রথমে জিএনইউ লিনাক্স স্টাইল চেষ্টা করে। যদি এটি ব্যর্থ হয় তবে এটি ওএসএক্স শৈলীর চেষ্টা করে। আপনি তারিখটি চান এমন অতীতের কত দিনের যুক্তি দিয়ে এটিকে কল করুন। আপনি কোনও যুক্তি পাস না করলে এটি 0 দিন ধরে নেওয়া হয়। এই কোডটি একটি ওয়ান-লাইনার, সুতরাং কাটা এবং পেস্ট করা উচিত - কোন লাইন শেষ ধরে নেওয়া হয় না। date_days_past () { days_past=${1:-0}; if ! date -v-${days_past}d +%Y%m%d 2>/dev/null; then date --date="-${days_past} day" +%Y%m%d; fi }
নোহ স্পুরিয়ার

50

আপনার যদি BSD (OSX) থাকে তবে dateআপনি এটি এটি করতে পারেন:

date -j -v-1d
Wed Dec 14 15:34:14 CET 2011

বা যদি আপনি একটি নির্বিচার তারিখে তারিখ গণনা করতে চান:

date -j -v-1d -f "%Y-%m-%d" "2011-09-01" "+%Y-%m-%d"
2011-08-31

41
date --date='-1 day'

4
ম্যাকোস সিয়েরাতে date: illegal option -- -
এরোস

2
এই সিনট্যাক্সটি ম্যাকোজে কাজ করার জন্য আপনাকে প্যাকেজের dateমাধ্যমে উপলব্ধ GNU সংস্করণ ইনস্টল coreutilsকরতে হবে। আপনি যদি হোমব্রু ব্যবহার করছেন তবে আপনি এটির মাধ্যমে এটি ইনস্টল করতে পারেন brew install coreutils, তারপরে আপনার gdateকমান্ডের মাধ্যমে জিএনইউ তারিখটি ব্যবহার করতে সক্ষম হওয়া উচিত । দেখুন: topbug.net/blog/2013/04/14/…
সুমিতু

17

ম্যাক ওএসএক্স

গতকালের তারিখের জন্য:

date -v-1d +%F

যেখানে 1 ডি বর্তমান দিন বিয়োগ 1 দিন নির্ধারণ করে। একইভাবে,

তারিখ -v-1w +% F - পূর্ববর্তী সপ্তাহের তারিখের জন্য

তারিখ -v-1m +% F - পূর্ববর্তী মাসের তারিখের জন্য

যদি আপনি GNU তারিখ পেয়ে থাকেন,

date --date="1 day ago"

আরও তথ্য: https://www.cyberciti.biz/tips/linux-unix-get-Yyess- আগামীকাল- তারিখ html


7

আচ্ছা এটি একটি দেরি উত্তর, কিন্তু এটি কাজ করে বলে মনে হচ্ছে !!

     YESTERDAY=`TZ=GMT+24 date +%d-%m-%Y`;
     echo $YESTERDAY;


4

দুঃখিত আমি সোলারিস সিস্টেমে উল্লেখ না করলাম। যেমন, সোলারিস বাশ-এ-ডেট স্যুইচ পাওয়া যায় না।

আমি টাইমজোনটিতে সামান্য কৌশল নিয়ে আগের তারিখটি পেতে পারি।

DATE=`TZ=MYT+16 date +%Y-%m-%d_%r`
echo $DATE

যদি আপনি দিবালোক সংরক্ষণের সময় ব্যবহার করে কোনও জায়গায় বাস করেন তবে এই পদ্ধতিটি 100% নির্ভরযোগ্য নয় (আসলে প্রায় 98%)।
jlliagre

ঠিক নয়, আপনি ব্যবহার করতে পারেন bash $(TZ=America/New_York date +%Y-%m-%d)
phray2002

3

পরিবর্তে পার্ল ব্যবহার করবেন?

perl -e 'print scalar localtime( time - 86400 ) . "\n";'

অথবা, নউক এবং (আব) ব্যবহার / ইউএসআর / বিন / অ্যাডবি ব্যবহার করুন:

nawk 'BEGIN{printf "0t%d=Y\n", srand()-86400}' | adb

জুড়ে এসেছিল এই খুব ... উন্মাদ!

/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= '/^time\(\)/ {gsub(/ /,"",$2);printf "0t%d=Y\n", $2-86400}' | adb


1
yesterday=`date -d "-1 day" %F`

গতকালের তারিখটি YYYY-MM-DD ফর্ম্যাটে পরিবর্তনশীলতে রাখে $yesterday


1
#!/bin/bash
OFFSET=1;
eval `date "+day=%d; month=%m; year=%Y"`
# Subtract offset from day, if it goes below one use 'cal'
# to determine the number of days in the previous month.
day=`expr $day - $OFFSET`
if [ $day -le 0 ] ;then
month=`expr $month - 1`
if [ $month -eq 0 ] ;then
year=`expr $year - 1`
month=12
fi
set `cal $month $year`
xday=${$#}
day=`expr $xday + $day`
fi
echo $year-$month-$day

সংশোধনের জন্য +1, আকর্ষণীয় পদ্ধতি, যদিও এটি কিছুটা ভার্বোস।
পিটার লিন্ডকভিস্ট

1
হাই মেডোিক্স, আমি $ {$ #} এর অর্থ খুঁজে পাচ্ছি না} আমি জানি যে $ # একটি স্ক্রিপ্ট / ফাংশনে আর্গুমেন্টের সংখ্যা বোঝায়। তবে আমি এটির সাথে সম্পর্কিত হতে পারছি না। সাহায্য করুন.
কার্তিক এস

এটি মাসের পরিবর্তনে প্রিভিয়াস দিবসের জন্য কাজ করে না। উদাহরণস্বরূপ আজ 1 July , 2013, ফলাফলটি মুদ্রিত হচ্ছে 2013-6-1347, যেখানে প্রত্যাশিত ফলাফলটি রয়েছে2013-6-30
বিভ্রান্ত

"ফাই" চেষ্টা "দিন = echo $(cal $month $year)|tr ' ' '\n'|tail -n 1" এর মধ্যে 3 লাইনের পরিবর্তে
আন্তোন রোজলভ

1

আপনি যদি নির্বাচিত তারিখের ফর্ম্যাটটি 'ওয়াইওয়াইওয়াইএম' হয় তবে আপনি একটি সাধারণ গণনা করতে পারেন, একটি রেজেক্সের সাথে নিমজ্জনিত:

echo $(($(date +"%Y%m") - 1)) | sed -e 's/99$/12/'

2020 সালের জানুয়ারিতে এটি 201912 ;-) ফেরত আসবে; তবে, এটি কেবলমাত্র কার্যকর, যখন তারিখের গণনা বিকল্প এবং অন্যান্য তারিখের অনুবাদকের বিকল্প নেই (যেমন পার্ল ব্যবহার করে) উপলব্ধ নেই ;-)


1
date -d "yesterday" '+%Y-%m-%d'

অথবা

date=$(date -d "yesterday" '+%Y-%m-%d')
echo $date

date: illegal option: -dসোলারিসের ফলস্বরূপ । আপনার উত্তর যা নন-জিএনইউ সোলারিস প্ল্যাটফর্ম সম্পর্কে কোনও প্রশ্নের জন্য পসিক্স-স্ট্যান্ডার্ড dateইউটিলিটিতে অ-বহনযোগ্য জিএনইউ এক্সটেনশনের উপর নির্ভর করে ।
অ্যান্ড্রু হেনেল


0

ডিএসটি সচেতন সমাধান:

টাইমজোনটি কয়েক ঘন্টা ঘড়ির বদলে পরিবর্তন করা সম্ভব। দিবালোক সংরক্ষণের কারণে, 24 ঘন্টা আগে আজ বা গতকাল আগের দিন হতে পারে।

আপনি নিশ্চিত যে গতকাল 20 বা 30 ঘন্টা আগে। কোনটি? ওয়েল, সবচেয়ে সাম্প্রতিক একটি যা আজ নেই।

echo -e "$(TZ=GMT+30 date +%Y-%m-%d)\n$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1

ইকো কমান্ডে ব্যবহৃত -e প্যারামিটারটি ব্যাশের সাথে প্রয়োজন তবে ksh দিয়ে কাজ করবে না। Ksh এ আপনি একই কমান্ড -e পতাকা ব্যতীত ব্যবহার করতে পারেন।

যখন আপনার স্ক্রিপ্টটি বিভিন্ন পরিবেশে ব্যবহৃত হবে, আপনি স্ক্রিপ্টটি #! / Bin / ksh বা #! / Bin / bash দিয়ে শুরু করতে পারেন। আপনি নতুন লাইনের মাধ্যমে new n প্রতিস্থাপন করতে পারেন:

echo "$(TZ=GMT+30 date +%Y-%m-%d)
$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1

0

খুব সেক্সি না হলেও কাজটি করতে পারেন:

perl -e 'my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time - 86400);$year += 1900; $mon+= 1; printf ("YESTERDAY: %04d%02d%02d \n", $year, $mon, $mday)'

"মার্টিন ক্লেটন" উত্তর থেকে তৈরি।


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