मैं बैश में वर्तमान समय से एक दिन पहले की तारीख को कैसे प्रिंट कर सकता हूं?
--date
या -d
विकल्प जीएनयू तारीख में ही उपलब्ध है
मैं बैश में वर्तमान समय से एक दिन पहले की तारीख को कैसे प्रिंट कर सकता हूं?
--date
या -d
विकल्प जीएनयू तारीख में ही उपलब्ध है
जवाबों:
यदि आपके पास जीएनयू तिथि है और मैंने आपको सही ढंग से समझा है
$ date +%Y:%m:%d -d "yesterday"
2009:11:09
या
$ date +%Y:%m:%d -d "1 day ago"
2009:11:09
date -v-1d
पर OSX (ऋण), -v+1d
(धन)
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 }
यदि आपके पास 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
date --date='-1 day'
date: illegal option -- -
date
माध्यम से उपलब्ध जीएनयू संस्करण coreutils
को मैकओएस पर इस वाक्यविन्यास कार्य को स्थापित करने की आवश्यकता है । यदि आप Homebrew का उपयोग कर रहे हैं, तो आप इसे स्थापित कर सकते हैं brew install coreutils
, जिसके बाद आपको gdate
कमांड के माध्यम से GNU तिथि का उपयोग करने में सक्षम होना चाहिए । देखें: topbug.net/blog/2013/04/14/…
मैक ओएस एक्स
कल की तारीख के लिए:
date -v-1d +%F
जहां 1 डी वर्तमान दिन शून्य से 1 दिन को परिभाषित करता है। इसी तरह,
तारीख -v-1w +% एफ - पिछले सप्ताह की तारीख के लिए
तारीख -v-1m +% एफ - पिछले महीने की तारीख के लिए
अगर आपको GNU डेट है,
date --date="1 day ago"
और जानकारी: https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html
date +%Y:%m:%d -d "yesterday"
दिनांक प्रारूप के बारे में जानकारी के लिए दिनांक के लिए मैन पेज देखें
date --date='-1 day'
क्षमा करें, मैं सोलारिस प्रणाली पर उल्लेख नहीं कर रहा हूं। जैसे, सोलिडिस बैश पर -date स्विच उपलब्ध नहीं है।
मुझे पता है कि मैं समय-सीमा पर थोड़ी चाल के साथ पिछली तारीख प्राप्त कर सकता हूं।
DATE=`TZ=MYT+16 date +%Y-%m-%d_%r`
echo $DATE
bash $(TZ=America/New_York date +%Y-%m-%d)
शायद बजाय पर्ल का उपयोग करें?
perl -e 'print scalar localtime( time - 86400 ) . "\n";'
या, nawk और (ab) उपयोग / usr / bin / adb का उपयोग करें:
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
date --date='-1 day'
#!/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 July , 2013
परिणाम छपा हुआ है 2013-6-1347
, जबकि अपेक्षित परिणाम है2013-6-30
echo $(cal $month $year)|tr ' ' '\n'|tail -n 1
" के बीच 3 पंक्तियों के बजाय
यदि आप चयनित तिथि प्रारूप 'YYYYMM' है, तो आप एक सरल गणना कर सकते हैं, जिसे एक regex के साथ जोड़ा जा सकता है:
echo $(($(date +"%Y%m") - 1)) | sed -e 's/99$/12/'
2020 के जनवरी में यह 201912 में वापस आ जाएगा;; लेकिन, यह केवल एक समाधान है, जब तारीख में गणना के विकल्प नहीं होते हैं और अन्य तिथि-सूचक विकल्प (जैसे पर्ल का उपयोग करके) उपलब्ध नहीं होते हैं; ;-)
date -d "yesterday" '+%Y-%m-%d'
या
date=$(date -d "yesterday" '+%Y-%m-%d')
echo $date
date: illegal option: -d
सोलारिस पर होता है। आपका उत्तर जो गैर-जीएनयू सोलारिस प्लेटफ़ॉर्म के बारे में एक प्रश्न के लिए पोसिक्स-मानक date
उपयोगिता के लिए गैर-पोर्टेबल जीएनयू एक्सटेंशन पर निर्भर करता है।
नीचे दिए गए कोड की कोशिश करें, जो डीएसटी के हिस्से का भी ख्याल रखता है।
if [ $(date +%w) -eq $(date -u +%w) ]; then
tz=$(( 10#$gmthour - 10#$localhour ))
else
tz=$(( 24 - 10#$gmthour + 10#$localhour ))
fi
echo $tz
myTime=`TZ=GMT+$tz date +'%Y%m%d'`
कर्टसी अंसगर वाइचर्स
DST जागरूक समाधान:
कुछ घंटों के लिए घड़ी बदलने के लिए टाइमज़ोन में हेरफेर संभव है। दिन के समय की बचत के कारण, 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
इको कमांड में उपयोग किया जाने वाला पैरामीटर बैश के साथ आवश्यक है, लेकिन ksh के साथ काम नहीं करेगा। Ksh में आप एक ही कमांड का उपयोग कर सकते हैं -e फ्लैग के बिना।
जब आपकी स्क्रिप्ट का उपयोग विभिन्न वातावरणों में किया जाएगा, तो आप स्क्रिप्ट को #! / Bin / ksh या #! / Bin / bash से शुरू कर सकते हैं। आप एक नई पंक्ति द्वारा \ n को भी बदल सकते हैं:
echo "$(TZ=GMT+30 date +%Y-%m-%d)
$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1
date +%Y:%m:%d|awk -vFS=":" -vOFS=":" '{$3=$3-1;print}'
2009:11:9