我正在构建一个用于远程日志监控的 Web 前端,
必须管理大约 10 个不同的地理位置,我遇到了你们中的一些人已经拥有的 3 头地狱犬。
有什么方法可以从远程 HPUX shell 变量中获取以下远程信息:
- zoneinfo(国家/城市)
- UTC + 偏移量(我可以从 zoneinfo 轻松获得)
到目前为止,我能得到的最好的是操作系统缩写的时区(这是否足以通过静态构建的 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
我会使用 echo $TZ ,它会输出一些更有用的数据,比如 CAT-2,但是一些远程 HP-UX 甚至没有配置这个,因此迫使我依赖模棱两可的 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)