Linux: imposta la data dalla riga di comando


77

Come modificare la data di sistema in Linux?

Voglio cambiare:

  • Solo anno
  • Solo mese
  • Solo data
  • Qualsiasi combinazione di cui sopra tre

2
Ad esempio, è date --set='-2 years'possibile impostare l'orologio indietro di due anni, lasciando identici tutti gli altri elementi. Puoi cambiare mese e giorno del mese allo stesso modo. Non ho verificato cosa succede se quel calcolo si traduce in un datetime che in realtà non esiste, ad esempio durante una commutazione dell'ora legale, ma il comportamento dovrebbe essere identico al solito comportamento "imposta sia la data che l'ora su valori concreti".
Christian Severin,

Supponendo che tu stia cercando di impostare la data sull'ora corrente, potresti fare sudo ntpd -gqin modo che l'aggiornamento del sistema venga eseguito automaticamente utilizzando il servizio ntp.
Steven Soroka,

Risposte:


96

Utilizzare date -s:

date -s '2014-12-25 12:34:56'

Eseguilo come root o sotto sudo. Cambiare solo uno dell'anno / mese / giorno è più una sfida e comporterà la ripetizione di bit della data corrente. Esistono anche strumenti per la data della GUI integrati nei principali ambienti desktop, solitamente accessibili tutto il giorno.

Per modificare solo una parte del tempo, è possibile utilizzare la sostituzione dei comandi nella stringa della data:

date -s "2014-12-25 $(date +%H:%M:%S)"

cambierà la data, ma manterrà l'ora. Vedi man dateper formattare i dettagli per realizzare altre combinazioni: i singoli componenti sono %Y, %m, %d, %H, %M, e %S.


Non voglio cambiare l'ora
SHW,

5
Non c'è opzione per farlo. date -s "2014-12-25 $(date +%H:%M:%S)"Tuttavia, è possibile utilizzare per modificare la data e riutilizzare l'ora corrente.
Michael Homer,

sono venuti qui e ore e minuti corrispondevano all'ora corrente. - bello
Alex2php

3
date: cannot set date: Invalid argument
Chris Stryczynski,

@MichaelHomer @SHW è possibile cambiare solo la data con un comando simile date -s 2018-01-01. Qualcuno ha condiviso questo in una risposta anche: superuser.com/questions/870068/…
baptx

42

Ora di sistema

È possibile utilizzare dateper impostare la data di sistema. L'implementazione GNU di date(come si trova sulla maggior parte dei sistemi basati su Linux non incorporati) accetta molti formati diversi per impostare l'ora, qui alcuni esempi:

impostare solo l'anno:

date -s 'next year'
date -s 'last year'

impostare solo il mese:

date -s 'last month'
date -s 'next month'

impostare solo il giorno:

date -s 'next day'
date -s 'tomorrow'
date -s 'last day'
date -s 'yesterday'
date -s 'friday'

insieme tutti:

date -s '2009-02-13 11:31:30' #that's a magical timestamp

Tempo hardware

Ora l'ora del sistema è impostata, ma potresti voler sincronizzarla con l'orologio hardware:

Utilizzare --showper stampare l'ora dell'hardware:

hwclock --show

È possibile impostare l'orologio hardware sull'ora di sistema corrente:

hwclock --systohc

O l'ora di sistema per l'orologio hardware

hwclock --hctosys

2
Punti bonus per illustrare i modi non ovvi in ​​cui è possibile impostare la data con esempi e per evidenziare la differenza tra "ora di sistema" e "orologio hardware". Risposta molto utile!
Mark Edington,

3

Si modifica la data con il datecomando. Tuttavia, il comando prevede una data completa come argomento:

# date -s "20141022 09:45"
Wed Oct 22 09:45:00 BST 2014

Per modificare parte della data, emettere la data corrente con la parte della data che si desidera modificare come stringa e tutte le altre come variabili di formattazione della data. Quindi passalo al date -scomando per impostarlo:

# date -s "$(date +'%Y12%d %H:%M')"
Mon Dec 22 10:55:03 GMT 2014

cambia il mese al 12 ° mese - dicembre.

I formati della data sono:

  • %Y - Anno
  • %m - Mese
  • %d - Giorno
  • %H - Ora
  • %M - Minuto

Cerco di cambiare ma non sta cambiando: - $ sudo date --set = "30/09/2015 alle 10: 05: 59.990" mer 30 set 10:05:59 +0530 2015 $ date gio 23 maggio 15:10:37 +0530 2019
Vinod,

2

Per quelli come me con ESXI 5.1, ecco cosa mi ha risposto il sistema

~ # date -s "2016-03-23 09:56:00"
date: invalid date '2016-03-23 09:56:00'

Invece ho dovuto usare un comando ESX specifico:

esxcli system time set  -y 2016 -M 03 -d 23  -H 10 -m 05 -s 00

3
Grazie per il -1, ma ti dispiacerebbe spiegare perché ? Se hai ottenuto una risposta migliore / più completa / più esatta, non esitare a commentare.
Balmipour,

1

Il comando per modificare la data di sistema è date.

Esistono due modi per chiamare il comando date (in Linux):

   date [OPTION]... [+FORMAT]
   date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

Facile

Il modo più semplice è utilizzare date -sin quanto consente l'uso di semplici date relative

 $ date -s yesterday; date
 date: cannot set date: Operation not permitted
 Sat Jan  5 07:21:07 EST 2019
 Sun Jan  6 07:21:07 EST 2019

La data non è cambiata perché è stata eseguita con un utente limitato $. Se vuoi davvero cambiare la data, usa root ( #) o sudo:

 $ sudo date -s yesterday; date
 Sat Jan  5 07:21:07 EST 2019
 Sat Jan  5 07:21:07 EST 2019

Quindi, cambiare qualsiasi parte di una data relativa è facile come nominarla:

 $ date -s "5 years ago"
 Mon Jan  6 08:26:26 EST 2014

 $ date -s "+6 months"
 Sat Jul  6 08:28:39 EDT 2019

 $ date -s "+3 hours -13 minutes"
 Sun Jan  6 11:16:59 AST 2019

Le date assolute sono un po 'più complesse in quanto hanno bisogno di maggiori dettagli:

 $ date -s "2001-07-23 10:11:12"

In alternativa, è possibile utilizzare il comando date due volte:

 $ date -s "$(date +'%Y-%m-%d %H:%M:%S')"

sostituire uno qualsiasi di %con un valore valido e la data verrà impostata (solo come root).

 $ date -s "$(date +'%Y-11-%d %H:%M:%S')"
 Wed Nov  6 08:37:15 EST 2019

diretto

Il secondo modulo di chiamata per data viene utilizzato per modificare direttamente la data di sistema.

 date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

Così :

 date 11230812              # MMDDhhmm

Imposta la data il 23 novembre alle 08h e 12min.

BSD ha un comando simile ma un formato diverso ([[[[[[cc] yy] mm] dd] HH] MM [.ss]).

Prova datecome utente limitato per vedere cosa farebbe (senza cambiare nulla):

 $ date 11230812
 date: cannot set date: Operation not permitted
 Sat Nov 23 08:12:00 EST 2019

Oppure, se vuoi davvero cambiare la data, come root:

 # date 11230812
 # date
 Sat Nov 23 08:12:00 EST 2019

Notare che saranno interessati servizi come NTP o chrony. E, se riavviato, reimposterà la data su quella reale.

Aggiungi un AA per impostare l'anno:

 $ date 1123081222
 date: cannot set date: Operation not permitted
 Wed Nov 23 08:12:00 EST 2022

O un CCYY per impostare anno e secolo:

 $ date 112308121982
 date: cannot set date: Operation not permitted
 Tue Nov 23 08:12:00 EST 1982

-1

Ho usato il comando data e il formato ora elencati di seguito per impostare correttamente la data dal comando shell terminale eseguito su Android Things che utilizza Linux Kernal.

data 092615002017.00

MMDDHHMMYYYY.SS

MM - Mese - 09

GG - Giorno - 26

HH - Ora - 15

MM - Min - 00

AAAA - Anno - 2017

.SS - secondo - 00


Dato che questo non funziona con GNU o BSD date, potresti aggiungere ulteriori informazioni su quale sistema è rilevante e su come è rilevante per questa particolare domanda.
Kusalananda
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.