GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo hacer que `date` genere la hora de una zona horaria diferente?

Tengo un servidor ejecutándose con la zona horaria establecida en UTC . Parecía que, en general, era una buena práctica (corríjame si me equivoco).

De todos modos, uno de los servidores a los que me conecto, para scp archivos, se ejecuta en EDT y almacena los archivos que necesito copiar en el formato /path/to/filename/data20120913

Miré tratando de rsync archivos usando algo como find's -mtime -1 bandera para archivos modificados en el último día, pero no tuve suerte.

No me importa simplemente usar scp para copiar el archivo del día actual, pero a partir de ahora hay una ventana de 4 horas en la que se ejecuta date +%Y%m%d dará un día diferente en cada servidor y eso me molesta un poco.

Mirando a través de man date Veo que puedo tener la hora de salida como UTC , pero no veo una forma de que salga como otra zona horaria como EDT

Supongo que también podría usar algo como GNU extensión de fecha date -d 20100909 +%s para obtener la fecha en segundos a partir de la época, aplique un manual 4 * 60 * 60 segundo cálculo, y trate de representarlo como una fecha, pero luego, cuando comience el horario de verano, todavía habrá una hora de diferencia.

¿Existe una forma más sencilla de mostrar la fecha en un YYYYMMDD? formato para EDT en un servidor que está establecido en UTC ?

Respuesta aceptada:

Puede establecer una zona horaria para la duración de la consulta, así:

TZ=America/New_York date

Tenga en cuenta el espacio en blanco entre el TZ configuración y la date dominio. En estilo Bourne y rc -como shell, que establece el TZ variable solo para la línea de comando. En otros shells (csh , tcsh , fish ), siempre puedes usar el env comando en su lugar:

env TZ=America/New_York date

tl;dr

En sistemas Linux. las zonas horarias se definen en archivos en el /usr/share/zoneinfo directorio. Esta estructura a menudo se conoce como la "base de datos Olson" en honor a su colaborador fundador.

Las reglas para cada zona horaria se definen como líneas de archivo de texto que luego se compilan en un archivo binario. Las líneas así compiladas definen el nombre de la zona; un rango de datos y tiempo durante el cual se aplica la zona; un desplazamiento de UTC para la hora estándar; y la notación para definir cómo se produce la transición hacia y desde el horario de verano, si corresponde.

Por ejemplo, el directorio "América" ​​contiene la información necesaria para Nueva York en el archivo America/New_York como se usa, arriba.

Tenga en cuenta que la especificación de una zona inexistente (nombre de archivo) se ignora silenciosamente y se notifican las horas UTC. Por ejemplo, esto informa una hora incorrecta:

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

La Especificación única de UNIX, versión 3, conocida como SUSv3 o POSIX-2001, señala que para la portabilidad, la cadena de caracteres que identifica la descripción de la zona horaria debe comenzar con dos puntos. Así, también podemos escribir:

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

Como método alternativo a la especificación de zonas horarias utilizando un nombre de ruta a un archivo de descripción, SUSv3 describe el modelo POSIX. En este formato, una cadena se define como:

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

donde std es el nombre del componente estándar y dst es el horario de verano. Cada nombre consta de tres o más caracteres. El offset es positivo para las zonas horarias al oeste del primer meridiano y negativo para las zonas al este del meridiano. El desplazamiento se agrega a la hora local para obtener UTC (anteriormente conocido como GMT). El start y end los campos de hora indican cuándo se producen las transiciones estándar/luz diurna.

Relacionado:Excel:¿pronóstico de fecha futura en función del número promedio de días entre un número variable de fechas en el pasado?

Por ejemplo, en el este de los Estados Unidos, la hora estándar es 5 horas antes que UTC, y podemos especificar EST5EDT en lugar de America/New_York . Sin embargo, estas alternativas no siempre se reconocen, especialmente para zonas fuera de los Estados Unidos, y es mejor evitarlas.

HP-UX (un UNIX compatible con SUSv3) utiliza reglas textuales en /usr/lib/tztab y los nombres POSIX como EST5EDT, CST6CDT, MST7MDT, PST8PDT. El archivo incluye todas las reglas históricas para cada zona horaria, similar a la base de datos de Olson.

NOTA: Debería poder encontrar todas las zonas horarias inspeccionando el siguiente directorio:/usr/share/zoneinfo .


Linux
  1. Cómo verificar la zona horaria en Linux

  2. ¿Cómo rastrear el tiempo desde la línea de comandos?

  3. Establecer la fecha, la hora y la zona horaria en un servidor Linux

  4. CentOS/RHEL:cómo obtener la fecha y la hora del comando ejecutado en la salida del comando del historial

  5. ¿Cómo puedo obtener la fecha y la hora actuales en la terminal y establecer un comando personalizado en la terminal para ello?

Cómo obtener la fecha y hora actuales en Python

Cómo configurar la zona horaria en CentOS 7

Cómo cambiar la fecha, la hora y la zona horaria en Ubuntu 20.04 LTS

Cómo configurar la fecha, la hora y la zona horaria en RHEL 8

Comprobar la zona horaria en Linux

¿El indicador de hora no muestra la fecha/hora?