1

私は、リモート ログ監視用の 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)
4

1 に答える 1

3

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

DST を無視した GMT オフセットとして

(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 スクイーズ システム。

>>> 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'
>>>
于 2011-04-27T12:22:02.213 に答える