私は、リモート ログ監視用の Web フロントエンドを構築しており、
約 10 の異なる地理的場所を管理する必要があります。これまでに 3 頭のヘルハウンドに遭遇した人もいます。
リモート HPUX シェル変数から次のリモート情報を取得する方法はありますか?
- zoneinfo (国/都市)
- UTC + オフセット (これは zoneinfo から簡単に取得できます)
これまでのところ、私が得ることができる最高のものは、OSの省略されたタイムゾーンです(これは、静的に構築された pytz.common_timezones コレクションでリモート時間を繰り返し横断し、省略されたゾーンを国/都市に逆変換するのに十分ですか、それとも完全に間違った方法ですか? )
国/都市を取得した後、オフセットを簡単に取得できます(取得していません)
datetime.now(pytz.timezone('Asia/Dili')).strftime('%Z %z')
「TLT +0900」
- リモート短縮タイムゾーンを取得し、
(Linux ははるかに正気です。
grep "ZONE=" /etc/sysconfig/clock
ZONE="Europe/London"のように出力しますが、
HP-UX /etc/TIMEZONE は
TZ=CAT-2 の ような短縮されたタイムゾーンを使用します
CAT-2 のようなもう少し有用なデータを出力する echo $TZ を使用しますが、一部のリモート HP-UX ではこれが構成されていないため、あいまいな RFC822 日付に頼らざるを得ません。
date +%z
猫
私はpytz、datetime.datetime、email.Utilsの両方を調べましたが、短縮された時刻からzoneinfo国/都市に直接変換することはできないと考えています(pytzは反対
を許可します)リモートホストを登録するユーザー入力を受け入れるときに、国/都市のドロップダウンリストを追加するだけですか?
EDIT(部分的な解決策)
@Mike Penningtonの回答に基づいて構築
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)