2009-11-10 12 views
116

में तिथि (वर्तमान समय से एक दिन पहले) प्राप्त करें, मैं बैश में वर्तमान समय से पहले एक दिन कैसे प्रिंट कर सकता हूं?बैश

+0

कोशिश की गई तारीख लेकिन ऐसा लगता है कि सोलारिस 10 के बश – conandor

+0

में कोई-डी स्विच नहीं है, मुझे सनफ्रूवेयर से gnu date (coreutil पैकेज) इंस्टॉल करके एक और अच्छा समाधान मिला। – conandor

+0

और न ही AIX की तारीख – frankster

उत्तर

197

आप जीएनयू तारीख है और मैं तुम्हें सही ढंग से समझ में आ

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

या

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

मुझे सबसे अधिक सुझाव दिया गया है लेकिन डीडी स्विच सोलारिस की तारीख – conandor

+7

में नहीं मिला है यह नहीं सोचें कि यह फ्रीबीएसडी या ओएस एक्स पर काम करेगा। –

+2

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

34
date --date='-1 day' 
+2

मैकोज़ सिएरा पर एरोस:' दिनांक: अवैध विकल्प - - – kuanb

+0

मैकोज़ पर इस वाक्यविन्यास को काम करने के लिए, आपको 'कोर्यूटिल्स' पैकेज के माध्यम से उपलब्ध 'डेट' के जीएनयू संस्करण को स्थापित करने की आवश्यकता है। यदि आप होमब्रू का उपयोग कर रहे हैं, तो आप इसे 'ब्रू इंस्टॉल कोर्यूटिल्स' के माध्यम से इंस्टॉल कर सकते हैं, जिसके बाद आप 'gdate' कमांड के माध्यम से जीएनयू डेट का उपयोग करने में सक्षम होना चाहिए। देखें: https://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/ – Sumitsu

+0

मैकोज़ के लिए आप 'date का उपयोग कर सकते हैं -v -1d' ('मैन डेट' देखें) – silent

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 
+0

सुधार, रोचक विधि के लिए +1, भले ही यह थोड़ा वर्बोज़ हो। –

+1

हाय मेडिक्स, मुझे $ {$ #} का अर्थ नहीं मिल रहा है। मुझे पता है कि $ # एक स्क्रिप्ट/फ़ंक्शन में तर्कों की संख्या के लिए खड़ा है। लेकिन मैं इससे संबंधित नहीं हूं। कृपया मदद करे। –

+0

यह महीने के बदलाव पर प्रीवीस दिवस के लिए काम नहीं करता है। उदाहरण के लिए आज '1 जुलाई, 2013 'है, परिणाम मुद्रित किया जा रहा है' 2013-6-1347', जबकि अपेक्षित परिणाम' 2013-6-30' – misguided

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

डालता है चर में YYYY-MM-DD प्रारूप में कल की तारीख $yesterday

-1
date +%Y:%m:%d|awk -vFS=":" -vOFS=":" '{$3=$3-1;print}' 
2009:11:9 
+0

आज 1 जनवरी क्या है? –

3

उपयोग पर्ल बजाय शायद आदमी पेज देखें?

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

या, उपयोग nawk और (ab) का उपयोग/usr/bin/एशियाई विकास बैंक:

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

भर this भी ... पागल आया!

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

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

मुझे पता चला कि मैं टाइमज़ोन पर छोटी चाल के साथ पिछली तारीख प्राप्त कर सकता हूं।

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

यदि आप डेलाइट सेविंग टाइम का उपयोग करके किसी स्थान पर रहते हैं तो यह विधि 100% विश्वसनीय (लगभग 98% वास्तव में नहीं) है। – jlliagre

39

आप बीएसडी (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 
3

--date या -d विकल्प केवल जीएनयू तिथि में उपलब्ध है।

$ date --date 'yesterday' +%F 
date: illegal time format 
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... 
     [-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format] 
6

अच्छा यह एक देर का जवाब है, लेकिन ऐसा लगता है !!

 YESTERDAY=`TZ=GMT+24 date +%d-%m-%Y`; 
    echo $YESTERDAY; 
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'` 

Courtsey Ansgar Wiechers

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 

ईको कमांड में उपयोग किया गया पैरामीटर बैश के साथ आवश्यक है, लेकिन ksh के साथ काम नहीं करेगा। Ksh में आप बिना किसी ध्वज के एक ही कमांड का उपयोग कर सकते हैं।

जब आपकी स्क्रिप्ट विभिन्न वातावरणों में उपयोग की जाएगी, तो आप स्क्रिप्ट को #!/Bin/ksh या #!/Bin/bash के साथ प्रारंभ कर सकते हैं। कल की तारीख के लिए

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

मैक OSX

: तुम भी एक नई पंक्ति द्वारा \ N बदल सकते

date -v-1d +%F 

जहां 1 दिन को परिभाषित करता है वर्तमान दिन शून्य से 1 दिन। इसी तरह,

तारीख -v-1 माह +% एफ - पिछले सप्ताह तारीख के लिए

तारीख -v-1m +% एफ - पिछले महीने की तारीख

के लिए यदि आपके पास जीएनयू, DATE ,

date --date="1 day ago" 

और जानकारी: https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html