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 scparchivos, se está ejecutando EDTy almacena los archivos que necesito copiar en el formato/path/to/filename/data20120913
Miré el intento de rsyncarchivos usando algo como encontrar la -mtime -1bandera de encontrar archivos modificados en el último día, pero no tuve suerte.
No me importa usar solo scppara 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%ddará un día diferente en cada servidor y eso me molesta un poco.
Mirando a través man dateveo 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 GNUextensión de fecha date -d 20100909 +%spara obtener la fecha en segundos de la época, aplicar un 4 * 60 * 60segundo 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 YYYYMMDDformato para EDTun 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
TZconfiguración y eldatecomando. En elrcshell Bourne-like and like , eso establece laTZvariable solo para la línea de comando. En otras conchas (csh,tcsh,fish), siempre se puede utilizar elenvcomando:tl; dr
En sistemas Linux. las zonas horarias se definen en archivos en el
/usr/share/zoneinfodirectorio. 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_Yorktal 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
stdes el nombre del componente estándar ydstes el horario de verano. Cada nombre consta de tres o más caracteres. Eloffsetes 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 camposstartyendhora 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
EST5EDTen 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/tztaby 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
exportve mejor que elenvcomandoPuede hacer esto manipulando la
TZvariable 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
TZcadena 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.
#! / bin / sh # # # Imprima el tiempo especificado (o actual) desde el tiempo base en otras zonas horarias # y lo contrario # # # Zona horaria base desde / a la cual convertir TZBASE = Europa / Atenas # Zonas horarias para mostrar # Ver / usr / share / zoneinfo / para más nombres TZONES = 'UTC America / Los_Angeles America / New_York Europe / London Europe / Paris' # Desplegar formato FORMATO = '% H:% M (% p)% Z% a% m% b% Y' si ["$ 1"]; entonces tiempo = "$ 1" más hora = `fecha +% T` fi # Muestra la hora de la zona horaria de entrada especificada en la salida especificada # zona horaria tiempo de la funcion() { TZIN = $ 1 TZOUT = $ 2 TZ = $ TZOUT date --date = 'TZ = "' $ TZIN '"' "$ time" + "$ time $ TZIN is $ TZOUT $ FORMAT" } por tz en $ TZONES; hacer showtime $ TZBASE $ tz hecho eco por tz en $ TZONES; hacer showtime $ tz $ TZBASE hechofuente
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