Pregunta

Estoy construyendo una interfaz web para monitoreo de registros remotos,
Tener que manejar unas 10 ubicaciones geográficas diferentes que he llegado a los 3 encabezados Hell Hell Hound algunos de ustedes que ya tienen.

¿Hay alguna forma de obtener de una variable remota de shell HPUX la siguiente información remota:

  • ZoneInfo (País/Ciudad)
  • UTC + Offset (puedo obtener esto fácilmente desde el ZoneInfo)

Hasta ahora, lo mejor que pude obtener es la zona horaria abreviada del sistema operativo (¿es esto suficiente para cruzar el tiempo remoto con una colección Pytz.common_Timezones de iteración y convertir inversamente las zonas abreviadas en el país/ciudad o estoy yendo por completo por el camino equivocado? )

Puedo obtener fácilmente la compensación después de obtener el país/ciudad (que no lo he hecho)

datetime.now(pytz.timezone('Asia/Dili')).strftime('%Z %z')

'TLT +0900'

  • Obtenga zona horaria abreviada remota,

(Linux tiene mucho más sano

grep "ZONE=" /etc/sysconfig/clock  

salida como,
Zone = "Europa/Londres"
mientras que HP-UX /ETC /TimeZone usa zonas horarias abreviadas como
TZ = CAT-2

Usaría Echo $ TZ, que generaría datos un poco más útiles como CAT-2, pero algunos HP-UXES remotos ni siquiera tienen esto configurado, lo que me obliga a confiar en la fecha ambigua de RFC822,

date +%z  

GATO

He buscado a Pytz, Datetime.datetime, correo electrónico.
¿Debo rascar esta búsqueda de Don Quijote de autodescubrir la zona horaria remota y simplemente agregar una lista desplegable de país/ciudad al aceptar la entrada del usuario que registra el host remoto?

Editar (solución parcial)

construyendo en @Mike Pennington Respuesta

from datetime import datetime as dt
from datetime import timedelta as td
from dateutil.relativedelta import *
from email.Utils import mktime_tz, parsedate_tz

hpux_remote_date = 'Thu Apr 28 18:09:20 TLT 2011'
utctimestamp = mktime_tz(parsedate_tz( hpux_remote_date ))  

hpux_dt = dt.fromtimestamp( utctimestamp )
delta_offset = relativedelta(dt.utcnow(), hpux_dt)

hpux_utc = hpux_dt + delta_offset

# Sanity checking to ensure we are correct...
hpux_dt
datetime.datetime(2011, 4, 28, 18, 9, 20)
hpux_utc
datetime.datetime(2011, 4, 28, 9, 9, 22, 229148)
¿Fue útil?

Solución

Deberías poder encontrar tu compensación GMT así ...

Como compensación de GMT, ignorando el DST

(time.localtime()[3] - time.localtime()[8]) - time.gmtime()[3]

Estoy en la hora central (GMT - 6) Entonces, esto produce -6 en mi sistema.

Como compensación de GMT, incluida la compensación DST

(time.localtime()[3]) - time.gmtime()[3]

Esto rendimiento -5 en mi sistema.

Probablemente sea más fácil ir con la segunda opción y usarla para convertir esos tiempos HPUX locales en GMT; luego mangle con pytz según sea necesario.

EDITAR

Si está trabajando con una representación de texto de marcas de tiempo remotas (no GMT), probablemente sea más fácil trabajar directamente con objetos de fecha y hora ... No tengo HPUX a mano, pero supondré que la cadena de fecha es similar a mi Sistema de Squeeze Debian.

>>> from datetime import datetime as dt
>>> from datetime import timedelta as td
>>> # using os.popen() to simulate the results of a HPUX shell 'date'...
>>> # substitute the real HPUX shell date string in hpux_date
>>> hpux_date = os.popen('date').read().strip()
>>> hpux_dt = dt.strptime(hpux_date, '%a %b %d %H:%M:%S %Z %Y')
>>> # Rounding to the nearest hour because there *will* be slight delay
>>> # between shell string capture and python processing
>>> offset_seconds = ((dt.utcnow() - hpux_dt).seconds//3600)*3600
>>> hpux_gmt = hpux_dt + td(0,offset_seconds)
>>> # Sanity checking to ensure we are correct...
>>> hpux_gmt
datetime.datetime(2011, 4, 27, 17, 21, 58)
>>> hpux_dt
datetime.datetime(2011, 4, 27, 12, 21, 58)
>>> hpux_date
'Wed Apr 27 12:21:58 CDT 2011'
>>>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top