Frage

Ich baue ein Web -Frontend für die Überwachung der Remoteprotokolle.
Ich musste ungefähr 10 verschiedene geografische Orte verwalten, die ich in die 3 -Kopf -Hölle gestoßen habe, die einige von Ihnen bereits haben.

Gibt es eine Möglichkeit, eine Remote -HPUX -Shell -Variable zu erhalten, die folgende Remote -Informationen:

  • ZoneInfo (Land/Stadt)
  • UTC + Offset (ich kann dies leicht vom ZoneInfo erhalten)

Das Beste, was ich bekommen könnte, ist die abgekürzte OS -Zeitzone (reicht dies aus, um die Fernzeit mit einem staatlich gebauten Pytz -Sammlung iterativ zu überschreiten. Die Sammlung von Pytz.Common_Timezones und umgekehrt die abgekürzten Zonen in Land/Stadt oder ich gehe den falschen Weg? ))

Ich kann leicht den Offset bekommen, nachdem ich das Land/die Stadt bekommen habe (was ich nicht habe)

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

'TLT +0900'

  • Remote abgekürzte Zeitzone erhalten,

(Linux hat die weitaus vernünftigere

grep "ZONE=" /etc/sysconfig/clock  

Ausgabe wie,
Zone = "Europa/London"
Während Hp-UX /etc /timezone abgekürzte Zeitzonen wie verwendet
TZ = CAT-2

Ich würde Echo $ TZ verwenden, das etwas mehr nützliche Daten wie CAT-2 ausgeben würde, aber einige Remote-HP-UXEs haben dies nicht einmal konfiguriert, wodurch mich gezwungen ist, auf das mehrdeutige RFC822-Datum zu stützen.

date +%z  

KATZE

Ich habe mich sowohl in Pytz, datetime.datetime, E -Mail.utils gesucht, aber wenn man bedenkt, dass es sich um eine NO -Direkt handelt, die direkt von der abgekürzten Zeit in das Land/die Stadt zoneInfo umgewandelt wird (Pytz erlaubt das Gegenteil)
Sollte ich nur diese Don Quixote -Suche nach automatischer Entdeckung der Remote -Zeitzone kratzen und einfach eine Country/City -Dropdown -Liste hinzufügen, wenn Sie die Benutzereingabe akzeptieren, wenn Sie den Remote -Host registrieren?

Bearbeiten (Teillösung)

Aufbau auf @Mike Pennington Antwort

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)
War es hilfreich?

Lösung

Sie sollten in der Lage sein, Ihren GMT -Offset wie diesen zu finden ...

Als GMT -Offset ignorieren Sie die DST

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

Ich bin in der zentralen Zeit (GMT - 6). -6 auf meinem System.

Als GMT -Offset, einschließlich DST -Kompensation

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

Dies ergibt -5 auf meinem System.

Es ist wahrscheinlich am einfachsten, die zweite Option zu erreichen und diese lokalen HPUX -Zeiten in GMT umzuwandeln. dann Mangle mit pytz nach Bedarf.

BEARBEITEN

Wenn Sie mit einer Textdarstellung von Remote (Nicht-GMT-) Zeitstempeln arbeiten, ist es wahrscheinlich einfacher, direkt mit DateTime-Objekten zu arbeiten ... Ich habe HPUX nicht praktisch, aber ich gehe davon aus, Debian Squeeze System.

>>> 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'
>>>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top