GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzo del comando `date` per ottenere il mese precedente, corrente e successivo

il problema principale si verifica quando non si dispone dell'opzione date --date disponibile e non si dispone dell'autorizzazione per installarla, quindi provare di seguito -

Previous month
#cal -3|awk 'NR==1{print toupper(substr($1,1,3))"-"$2}'
DEC-2016 
Current month
#cal -3|awk 'NR==1{print toupper(substr($3,1,3))"-"$4}'
JAN-2017
Next month
#cal -3|awk 'NR==1{print toupper(substr($5,1,3))"-"$6}'
FEB-2017

Il problema è che date prende la tua richiesta alla lettera e cerca di utilizzare una data del 31 settembre (essendo il 31 ottobre meno un mese) e poi, poiché non esiste, passa al giorno successivo che esiste. Il date documentazione (da info date ) ha il seguente consiglio:

La confusione nelle unità può causare problemi con gli elementi relativi. Ad esempio, "2003-07-31 -1 mese" potrebbe restituire 2003-07-01, poiché 2003-06-31 è una data non valida. Per determinare in modo più affidabile il mese precedente, puoi chiedere il mese prima del 15 del mese corrente. Ad esempio:

 $ date -R
 Thu, 31 Jul 2003 13:02:39 -0700
 $ date --date='-1 month' +'Last month was %B?'
 Last month was July?
 $ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!'
 Last month was June!

Se ti capita di utilizzare la data in un ambiente MacOS, prova questo:

ST1:~ ejf$ date
Mon Feb 20 21:55:48 CST 2017
ST1:~ ejf$ date -v-1m +%m
01
ST1:~ ejf$ date -v+1m +%m
03

Inoltre, preferirei calcolare il mese precedente e successivo il primo giorno di ogni mese, in questo modo non avrai problemi con i mesi che terminano il 30/31 o il 28/29 (anno bisestile di febbraio/febbraio)


va bene quanto segue:

date -d "$(date +%Y-%m-1) -1 month" +%-m
date -d "$(date +%Y-%m-1) 0 month" +%-m
date -d "$(date +%Y-%m-1) 1 month" +%-m

o di cui hai bisogno:

LAST_MONTH=`date -d "$(date +%Y-%m-1) -1 month" +%-m`
NEXT_MONTH=`date -d "$(date +%Y-%m-1) 1 month" +%-m`
THIS_MONTH=`date -d "$(date +%Y-%m-1) 0 month" +%-m`

hai chiesto un output come 9,10,11, quindi ho usato %-m

%m (senza -) produrrà un output come 09,... (zero iniziale)

funziona anche per più/meno di 12 mesi:

date -d "$(date +%Y-%m-1) -13 month" +%-m

prova

date -d "$(date +%Y-%m-1) -13 month"

per vedere il risultato completo


Linux
  1. CentOS / RHEL:come ottenere la data e l'ora del comando eseguito nell'output del comando della cronologia

  2. Comando per ottenere il tempo in millisecondi

  3. Ottieni l'ora corrente in ore e minuti

  4. Come posso aggiungere X giorni fino ad oggi e ottenere una nuova data?

  5. Ottieni il mese precedente indipendentemente dai giorni

Correggi facilmente un errore di battitura di un comando precedente usando il simbolo Carat (^).

Conosci il tuo sistema (usando la riga di comando)

Come ottenere la data e l'ora correnti in JavaScript

Suggerimenti e trucchi per l'utilizzo del comando wget Linux

Come clonare e ripristinare la partizione Linux usando il comando dd

Come usare il comando DD e come masterizzare ISO usandolo