【发布时间】:2011-08-13 18:46:27
【问题描述】:
我正在构建一个用于远程日志监控的 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="欧洲/伦敦"
而 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)
【问题讨论】:
-
您要问的是什么?这是一个用户界面问题吗?关于如何从时间戳中提取时区的问题?或者如何确定服务器的地理位置?
-
“从缩写时间转换为 zoneinfo 国家/城市是不可能的” - 这也不太可能。什么是'+0100'?是夏天的“欧洲/伦敦”还是冬天的“欧洲/柏林”或“欧洲/巴黎”?
-
@Bryan Oakley,我非常清楚。他在将 HPUX shell 变量中的数据导出为他可以用作
pytz偏移量的东西时遇到问题 -
@Mike Pennington:好的,但他的问题中唯一实际的问题是“我是否应该解决这个堂吉诃德的问题……然后添加一个国家/城市下拉列表……?”。我认为这个问题可以说得更清楚。
-
对不起,伙计们,为了设定我的目标,输入了太多信息,我会编辑它,总结一下,我需要一种无缝的方式来使用任何远程信息,这样我就可以获得本地服务器与远程服务器国家/城市和 UTC 偏移量。
标签: python hp-ux pytz zoneinfo