Tengo un servidor ejecutándose con la zona horaria establecida en UTC
. Parecía que generalmente era una buena práctica (corríjame si me equivoco).
De todos modos, uno de los servidores a los que me conecto, en orden a los scp
archivos, se está ejecutando EDT
y almacena los archivos que necesito copiar en el formato/path/to/filename/data20120913
Miré el intento de rsync
archivos usando algo como encontrar la -mtime -1
bandera de encontrar archivos modificados en el último día, pero no tuve suerte.
No me importa usar solo scp
para copiar el archivo del día actual, pero a partir de ahora hay una ventana de 4 horas donde la ejecución date +%Y%m%d
dará un día diferente en cada servidor y eso me molesta un poco.
Mirando a través man date
veo que puedo tener la salida de tiempo como UTC
, pero no veo una manera de que salga como otra zona horaria comoEDT
Supongo que también podría usar algo como la GNU
extensión de fecha date -d 20100909 +%s
para obtener la fecha en segundos de la época, aplicar un 4 * 60 * 60
segundo cálculo manual y ver cómo representar eso como una fecha, pero cuando comience el horario de verano todavía habrá una hora libre .
¿Hay una manera más simple de generar la fecha en un YYYYMMDD
formato para EDT
un servidor configurado UTC
?
Respuestas:
Puede establecer una zona horaria para la duración de la consulta, por lo tanto:
Tenga en cuenta el espacio en blanco entre la
TZ
configuración y eldate
comando. En elrc
shell Bourne-like and like , eso establece laTZ
variable solo para la línea de comando. En otras conchas (csh
,tcsh
,fish
), siempre se puede utilizar elenv
comando: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" para honrar a su contribuyente 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 ocurre la transición hacia y desde el horario de verano, si corresponde.
Por ejemplo, el directorio "América" contiene la información requerida para Nueva York en el archivo
America/New_York
tal como se utilizó anteriormente.Tenga en cuenta que la especificación de una zona inexistente (nombre de archivo) se ignora silenciosamente y se informan los tiempos UTC. Por ejemplo, esto informa una hora incorrecta:
La especificación Single 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 un carácter de dos puntos. Por lo tanto, también podemos escribir:
Como un 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:
donde
std
es el nombre del componente estándar ydst
es el horario de verano. Cada nombre consta de tres o más caracteres. Eloffset
es positivo para las zonas horarias al oeste del meridiano principal y negativo para las del este del meridiano. El desplazamiento se agrega a la hora local para obtener UTC (anteriormente conocido como GMT). Los camposstart
yend
hora indican cuándo ocurren las transiciones estándar / luz del día.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 deAmerica/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 de texto
/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 Olson.NOTA: Usted debe ser capaz de encontrar todas las zonas horarias inspeccionando el directorio siguiente:
/usr/share/zoneinfo
.fuente
export
ve mejor que elenv
comandoPuede hacer esto manipulando la
TZ
variable de entorno. Lo siguiente le dará la hora local para EE. UU. / Este, que también será lo suficientemente inteligente como para manejar el horario de verano cuando eso ocurra:El nombre de la zona proviene de los archivos y directorios dentro
/usr/share/zoneinfo
.fuente
¡Ten cuidado! Date felizmente escupirá la hora en su zona horaria ACTUAL, si le da una zona horaria que no reconoce.
Mira esto:
Tenga en cuenta que no hay una zona horaria llamada EDT. Como una cuestión de hecho,
devoluciones
Y esto funciona:
Sin embargo, si su amigo vive en la tierra mística de Gobbledygook y su información de zona coincide con la suya, puede obtener la fecha y hora en la zona de Gobbledygook y estará encantado de hacerlo sin ningún valor de salida para hacerle saber que el La zona no es conocida:
fuente
TZ
cadena con formato incorrecto devuelve la hora UTC.fuente
La sintaxis de la fecha es arcana y propensa a errores, lo que hace que una invocación de línea de comandos sea una molestia. Por lo tanto, escribí un pequeño script (lo llamé worldtime ), que imprimirá el tiempo especificado (o actual) desde el tiempo base zome (el local) en algunas otras zonas horarias y viceversa.
Aquí está. Ajústelo para que coincida con sus necesidades, póngalo en su camino y hágalo ejecutable.
fuente
A menudo tiene una marca de tiempo en la zona horaria local y necesita convertirla a tz remota. Se puede hacer con:
dónde:
fuente