बैश में तारीख (वर्तमान समय से एक दिन पहले) प्राप्त करें


171

मैं बैश में वर्तमान समय से एक दिन पहले की तारीख को कैसे प्रिंट कर सकता हूं?


कोशिश की गई है, लेकिन ऐसा लगता है कि सोलारिस 10 के बैश में कोई स्विच नहीं है
conandor

मुझे सनफ्रवेयर से गुनू डेट (कोरुटिल पैकेज) स्थापित करके एक और बढ़िया समाधान मिला।
कोन्डर

न ही एआईएक्स की तारीख में एक डी-स्विच है
फ्रैंक

--dateया -dविकल्प जीएनयू तारीख में ही उपलब्ध है
क्रिस एफए जॉनसन

इस प्रश्न के DST- सुरक्षित संस्करण के लिए 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
मैंने पाया कि ज्यादातर सुझाए गए उत्तर हैं, लेकिन -d स्विच सोलारिस की तारीख में नहीं मिला है
कंडक्टर

3
दिनांक फ़ंक्शन के साथ उबंटू पर उपयोग के लिए: $ (तिथि +% Y:% m:% d -d "1 दिन पहले"), आउटपुट है: 2013: 04: 21। और यदि आप 10 दिन पहले की तारीख चाहते हैं, तो आप $ (तिथि +% Y:% m:% d -d "10 दिन पहले") या $ (दिनांक +% Y:% m:% d -d "10 का उपयोग कर सकते हैं दिन पहले ")
zhihong

OS X पर आप काढ़ा के माध्यम से
कोरटाइल

11
date -v-1dपर OSX (ऋण), -v+1d(धन)
BGS

2
यह बैश फ़ंक्शन लिनक्स और OSX दोनों पर काम करेगा। मूल रूप से यह GNU लिनक्स शैली को सबसे पहले आज़माता है। यदि वह विफल रहता है तो यह OSX शैली को आजमाता है। उस दिन की संख्या के एक तर्क के साथ इसे कॉल करें जिसमें आप तारीख चाहते हैं। यदि आप कोई तर्क पारित करते हैं तो यह 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माध्यम से उपलब्ध जीएनयू संस्करण coreutilsको मैकओएस पर इस वाक्यविन्यास कार्य को स्थापित करने की आवश्यकता है । यदि आप Homebrew का उपयोग कर रहे हैं, तो आप इसे स्थापित कर सकते हैं brew install coreutils, जिसके बाद आपको gdateकमांड के माध्यम से GNU तिथि का उपयोग करने में सक्षम होना चाहिए । देखें: topbug.net/blog/2013/04/14/…
sumitsu

17

मैक ओएस एक्स

कल की तारीख के लिए:

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


7

खैर यह एक देर से जवाब है, लेकिन यह काम करने लगता है !!

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


4

क्षमा करें, मैं सोलारिस प्रणाली पर उल्लेख नहीं कर रहा हूं। जैसे, सोलिडिस बैश पर -date स्विच उपलब्ध नहीं है।

मुझे पता है कि मैं समय-सीमा पर थोड़ी चाल के साथ पिछली तारीख प्राप्त कर सकता हूं।

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

यह विधि 100% विश्वसनीय नहीं है (लगभग 98% वास्तव में) यदि आप दिन के समय की बचत का उपयोग करके किसी स्थान पर रहते हैं।
31:३१ बजे

बिल्कुल नहीं, आप उपयोग कर सकते हैं bash $(TZ=America/New_York date +%Y-%m-%d)
phray2002

3

शायद बजाय पर्ल का उपयोग करें?

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


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
22

"फाई" कोशिश "दिन = echo $(cal $month $year)|tr ' ' '\n'|tail -n 1" के बीच 3 पंक्तियों के बजाय
एंटोन रोसलोव

1

यदि आप चयनित तिथि प्रारूप 'YYYYMM' है, तो आप एक सरल गणना कर सकते हैं, जिसे एक regex के साथ जोड़ा जा सकता है:

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

नीचे दिए गए कोड की कोशिश करें, जो डीएसटी के हिस्से का भी ख्याल रखता है।

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'`

कर्टसी अंसगर वाइचर्स


0

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

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)'

"मार्टिन क्लेटन" उत्तर से तैयार।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.