GNU/Linux >> Linux Esercitazione >  >> Linux

Come fare in modo che "data" produca l'ora da un fuso orario diverso?

Ho un server in esecuzione con il fuso orario impostato su UTC . Sembrava che fosse generalmente una buona pratica (correggimi se sbaglio).

Comunque, uno dei server a cui mi collego, per scp file, è in esecuzione su EDT e memorizza i file che devo copiare nel formato /path/to/filename/data20120913

Ho esaminato il tentativo di rsync file utilizzando qualcosa come -mtime -1 di find flag per i file modificati nell'ultimo giorno, ma non ho avuto fortuna.

Non mi dispiace usare solo scp per copiare il file del giorno corrente, ma al momento c'è una finestra di 4 ore in cui eseguire date +%Y%m%d darà un giorno diverso su ogni server e questo mi infastidisce un po'.

Sfogliando man date Vedo che posso avere l'output dell'ora come UTC , ma non vedo un modo per visualizzarlo come un altro fuso orario come EDT

Suppongo che potrei anche usare qualcosa come GNU estensione di data date -d 20100909 +%s per ottenere la data in secondi dall'epoca, applica un manuale 4 * 60 * 60 secondo calcolo e vedi come renderla come una data, ma poi quando entra in gioco l'ora legale sarà ancora un'ora libera.

C'è un modo più semplice per generare la data in un YYYYMMDD formato per EDT su un server impostato su UTC ?

Risposta accettata:

Puoi impostare un fuso orario per la durata della query, così:

TZ=America/New_York date

Nota lo spazio bianco tra il TZ impostazione e la date comando. In stile Bourne e rc -like shell, che imposta il TZ variabile solo per la riga di comando. In altre shell (csh , tcsh , fish ), puoi sempre utilizzare env comando invece:

env TZ=America/New_York date

tl;dr

Su sistemi Linux. i fusi orari sono definiti nei file in /usr/share/zoneinfo directory. Questa struttura viene spesso chiamata "database Olson" per onorare il suo contributore fondatore.

Le regole per ciascun fuso orario sono definite come righe di file di testo che vengono quindi compilate in un file binario. Le righe così compilate definiscono il nome della zona; un intervallo di dati e di tempo durante il quale si applica la zona; un offset da UTC per l'ora standard; e la notazione per definire come avviene la transizione da e verso l'ora legale, se applicabile.

Ad esempio, la directory "America" ​​contiene le informazioni necessarie per New York nel file America/New_York come usato, sopra.

Fai attenzione che la specifica di una zona inesistente (nome file) viene ignorata silenziosamente e vengono riportati gli orari UTC. Ad esempio, questo segnala un'ora errata:

TZ="America/New York" date ### WRONG ###

La specifica UNIX singola, versione 3, nota come SUSv3 o POSIX-2001, rileva che per la portabilità, la stringa di caratteri che identifica la descrizione del fuso orario deve iniziare con i due punti. Quindi, possiamo anche scrivere:

TZ=":America/New_York" date
TZ=":America/Los_Angeles" date

Come metodo alternativo alla specifica dei fusi orari utilizzando un percorso per un file di descrizione, SUSv3 descrive il modello POSIX. In questo formato, una stringa è definita come:

std offset [dst[offset][,start-date[/time],end-date[/time]]]

dove std è il nome del componente standard e dst è l'ora legale. Ogni nome è composto da tre o più caratteri. Il offset è positivo per i fusi orari a ovest del primo meridiano e negativo per quelli a est del meridiano. L'offset viene aggiunto all'ora locale per ottenere UTC (precedentemente noto come GMT). L'start e end i campi dell'ora indicano quando si verificano le transizioni standard/luce diurna.

Correlati:Excel:prevedere la data futura in base al numero medio di giorni tra un numero variabile di date nel passato?

Ad esempio, negli Stati Uniti orientali, l'ora solare è 5 ore prima dell'ora UTC e possiamo specificare EST5EDT al posto di America/New_York . Tuttavia, queste alternative non sono sempre riconosciute, soprattutto per le zone al di fuori degli Stati Uniti, ed è meglio evitarle.

HP-UX (un UNIX conforme a SUSv3) utilizza regole testuali in /usr/lib/tztab e i nomi POSIX come EST5EDT, CST6CDT, MST7MDT, PST8PDT. Il file include tutte le regole storiche per ogni fuso orario, simili al database Olson.

NOTA: Dovresti essere in grado di trovare tutti i fusi orari controllando la seguente directory:/usr/share/zoneinfo .


Linux
  1. Come sincronizzare data e ora dalla riga di comando in Ubuntu

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

  3. Come reindirizzare l'output del comando time su un file in Linux?

  4. Come posso ottenere la data e l'ora correnti nel terminale e impostare un comando personalizzato nel terminale per questo?

  5. Come può sembrare che un processo abbia un nome diverso nell'output di ps?

Come ottenere la data e l'ora correnti in Python

Come impostare il fuso orario in CentOS 7

Come modificare la data, l'ora e il fuso orario in Ubuntu 20.04 LTS

Come impostare data, ora e fuso orario in RHEL 8

Controlla il fuso orario in Linux

L'indicatore dell'ora non mostra la data/l'ora?