質問

リモートログ監視用のWebフロントエンドを構築しています。
約10の異なる地理的場所を管理する必要があります。

リモート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  

のような出力、
ゾーン= "ヨーロッパ/ロンドン"
hp-ux /etc /timezoneは略語されたタイムゾーンを使用します
TZ = CAT-2

CAT-2のようなもう少し有用なデータを出力するEcho $ TZを使用しますが、一部のリモートHP-Xはこれを構成していないため、曖昧なRFC822日付に頼らざるを得ません。

date +%z  

私は両方をPytz、datetime.datetime、email.utilsを調べましたが、それが省略時間からZoneinfo国/都市への直接変換できることを考えると(pytzは反対を許します)
リモートホストを登録するユーザー入力を受け入れるときに、リモートタイムゾーンを自動化するこのドンキホーテクエストをスクラッチし、カントリー/シティドロップダウンリストを追加する必要がありますか?

編集(部分的な解決策)

@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)
役に立ちましたか?

解決

このようなGMTオフセットを見つけることができるはずです...

GMTオフセットとして、DSTを無視します

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

私は中央時間(gmt -6)ですので、これは利回りです -6 私のシステムで。

DST補償を含むGMTオフセットとして

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

これは利回りです -5 私のシステムで。

おそらく2番目のオプションを使用して、それを使用してそれらのローカルHPux時間をGMTに変換するのが最も簡単です。それからマングル pytz 要求に応じ。

編集

リモート(GMT以外の)タイムスタンプのテキスト表現を使用している場合、おそらくDateTimeオブジェクトで直接作業する方が簡単です...私はHPUXを手にしていませんが、日付文字列は私に似ていると思いますDebian Squeezeシステム。

>>> 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'
>>>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top