Question

Je construis une interface web pour la surveillance à distance des journaux,
avoir à gérer environ 10 différents endroits géographiques que je suis tombé sur le 3 hellhound headed certains d'entre vous ont déjà.

Est-il possible d'obtenir à partir d'une variable shell HPUX à distance les informations à distance suivante:

  • zoneinfo (Pays / Ville)
  • UTC + offset (je peux facilement obtenir ce à partir du zoneinfo)

Jusqu'à présent, le mieux que je puisse obtenir est le système d'exploitation fuseau horaire abrégé (Est-ce suffisant pour traverser le temps itérativement à distance avec une collection de pytz.common_timezones statiquement et convertir inverse les zones en Pays abrégées / Ville ou je vais complètement dans le mauvais sens?)

Je peux facilement obtenir le décalage après avoir obtenu la Ville / Pays (que j'ai pas)

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

'TLT 0900'

  • get fuseau horaire abrégé à distance,

(Linux a beaucoup plus sain d'esprit

grep "ZONE=" /etc/sysconfig/clock  

sortie comme,
ZONE = "Europe / Londres"
tandis que HP-UX / etc / utilisations TIMEZONE comme
abrégé timezones TZ = CAT-2

J'utiliser echo $ TZ qui génèrerait un peu de données plus utiles comme CAT-2, mais certains HP-Uxes à distance ne sont même pas configuré ainsi me forcer à compter à la date RFC822 ambiguë,

date +%z  

CAT

Je l'ai regardé à la fois dans pytz, datetime.datetime, email.Utils mais étant donné qu'il est un ne peut faire convertir directement de temps en abrégé dans le zoneinfo Pays / Ville (pytz permet au contraire)
devrais-je simplement rayer cette quête de Don Quichotte le fuseau horaire à distance Auto découverte et il suffit d'ajouter une liste déroulante Ville / Pays en acceptant l'entrée d'utilisateur l'enregistrement de l'hôte distant?

EDIT (solution partielle)

la construction sur la réponse Pennington @ Mike

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)
Était-ce utile?

La solution

Vous devriez être en mesure de trouver votre décalage GMT comme ça ...

En décalage GMT, sans tenir compte DST

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

Je suis dans le temps Central (GMT - 6). Donc, ce rendement -6 sur mon système

En décalage GMT, y compris la rémunération de l'heure d'été

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

Cela donne -5 sur mon système.

Il est probablement plus facile d'aller avec la deuxième option et l'utiliser pour convertir ces temps de HPUX locales en GMT; essoreuse puis avec pytz les besoins.

EDIT

Si vous travaillez avec une représentation de texte à distance (non GMT) TimeStamps, il est probablement plus facile de travailler directement avec datetime objets ... Je n'ai pas HPUX à portée de main, mais je suppose que la chaîne de date est semblable à mon système de compression 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'
>>>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top