Linux: establezca la fecha a través de la línea de comando

77

¿Cómo cambiar la fecha del sistema en Linux?

Quiero cambiar:

  • Solo año
  • Solo mes
  • Solo fecha
  • Cualquier combinación de los tres anteriores.
SHW
fuente
2
Puede usar, por ejemplo, date --set='-2 years'para retrasar el reloj dos años, dejando todos los demás elementos idénticos. Puede cambiar el mes y el día del mes de la misma manera. No he comprobado qué sucede si ese cálculo da como resultado una fecha y hora que en realidad no existe, por ejemplo, durante un cambio de horario de verano, pero el comportamiento debe ser idéntico al comportamiento habitual de "establecer la fecha y la hora en valores concretos".
Christian Severin
Suponiendo que intente establecer la fecha a la hora actual, puede hacer sudo ntpd -gqque el sistema se actualice automáticamente utilizando el servicio ntp.
Steven Soroka

Respuestas:

96

Uso date -s:

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

Ejecuta eso como root o under sudo. Cambiar solo uno del año / mes / día es más difícil e implicará repetir partes de la fecha actual. También hay herramientas de fecha GUI integradas en los principales entornos de escritorio, generalmente accesibles a través del reloj.

Para cambiar solo una parte del tiempo, puede usar la sustitución de comandos en la cadena de fecha:

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

cambiará la fecha, pero mantendrá la hora. Ver man datepara formatear datos para construir otras combinaciones: los componentes individuales son %Y, %m, %d, %H, %M, y %S.

Michael Homer
fuente
No quiero cambiar la hora
SHW
55
No hay opción para hacer eso. Sin date -s "2014-12-25 $(date +%H:%M:%S)"embargo, puede usar para cambiar la fecha y reutilizar la hora actual.
Michael Homer
llegó aquí y las horas y los minutos coincidían con la hora actual. - agradable
Alex2php
3
date: cannot set date: Invalid argument
Chris Stryczynski
@MichaelHomer @SHW es posible cambiar solo la fecha con un comando como date -s 2018-01-01. Alguien compartió esto en una respuesta también: superuser.com/questions/870068/...
baptx
42

hora del sistema

Puede usar datepara configurar la fecha del sistema. La implementación de GNU de date(como se encuentra en la mayoría de los sistemas basados ​​en Linux no integrados) acepta muchos formatos diferentes para establecer el tiempo, aquí hay algunos ejemplos:

establecer solo el año:

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

establecer solo el mes:

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

establecer solo el día:

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

conjunto todo junto:

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

Tiempo de hardware

Ahora la hora del sistema está configurada, pero es posible que desee sincronizarla con el reloj del hardware:

Use --showpara imprimir el tiempo de hardware:

hwclock --show

Puede configurar el reloj del hardware a la hora actual del sistema:

hwclock --systohc

O la hora del sistema para el reloj de hardware

hwclock --hctosys
caos
fuente
2
Puntos de bonificación para ilustrar las formas no obvias de establecer la fecha con ejemplos y para señalar la diferencia entre la "hora del sistema" y el "reloj de hardware". Muy útil respuesta!
Mark Edington
3

Cambia la fecha con el datecomando. Sin embargo, el comando espera una fecha completa como argumento:

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

Para cambiar parte de la fecha, envíe la fecha actual con la parte de fecha que desea cambiar como una cadena y todas las demás como variables de formato de fecha. Luego pasa eso al date -scomando para configurarlo:

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

cambia el mes al mes 12 - diciembre.

Los formatos de fecha son:

  • %Y - Año
  • %m - mes
  • %d - día
  • %H - hora
  • %M - Minuto
garethTheRed
fuente
Intento cambiar pero no está cambiando: - $ sudo date --set = "2015-09-30 10: 05: 59.990" Wed Sep 30 10:05:59 +0530 2015 $ date Thu May 23 15:10:37 +0530 2019
Vinod
2

Para aquellos como yo con ESXI 5.1, esto es lo que me respondió el sistema

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

Tuve que usar un comando ESX específico en su lugar:

esxcli system time set  -y 2016 -M 03 -d 23  -H 10 -m 05 -s 00
Balmipour
fuente
3
Gracias por el -1, pero ¿te importaría explicar por qué ? Si obtuvo una respuesta mejor / más completa / más exacta, no dude en comentar.
Balmipour
1

El comando para cambiar la fecha del sistema es date.

Hay dos formas de llamar al comando de fecha (en Linux):

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

Fácil

La forma más fácil es usarlo, date -sya que permite el uso de fechas relativas simples

 $ 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 fecha no cambió porque se ejecutó con un usuario limitado $. Si realmente desea cambiar la fecha, use root ( #) o sudo:

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

Por lo tanto, cambiar cualquier parte de una fecha relativa es tan fácil como nombrarla:

 $ 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

Las fechas absolutas son un poco más complejas ya que necesitan más detalles:

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

O puede usar el comando de fecha dos veces:

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

reemplace cualquiera de los %valores válidos y se establecerá la fecha (solo como raíz).

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

directo

El formulario de llamada de segunda fecha se usa para cambiar directamente la fecha del sistema.

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

Entonces :

 date 11230812              # MMDDhhmm

Fijará la fecha al 23 de noviembre a las 08h y 12min.

BSD tiene un comando similar pero un formato diferente ([[[[[cc] aa] mm] dd] HH] MM [.ss]).

Intente datecomo usuario limitado para ver qué haría (sin cambiar nada):

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

O, si realmente desea cambiar la fecha, como root:

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

Tenga en cuenta que los servicios como NTP o chrony se verán afectados. Y, si se reinicia, restablecerá la fecha a la real.

Agregue un AA para establecer el año:

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

O un CCYY para establecer año y siglo:

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

Utilicé el comando de fecha y el formato de hora que se enumeran a continuación para establecer con éxito la fecha desde el comando de shell del terminal realizado en Android Things que usa Linux Kernal.

fecha 092615002017.00

MMDDHHMMYYYY.SS

MM - Mes - 09

DD - Día - 26

HH - Hora - 15

MM - Min - 00

AAAA - Año - 2017

.SS - segundo - 00

Brook Oldre
fuente
Dado que esto no funciona con GNU o BSD date, ¿podría agregar más información sobre para qué sistema es relevante y cómo es relevante para esta pregunta en particular?
Kusalananda