Я создаю веб-интерфейс для удаленного мониторинга журналов,
мне приходится управлять примерно 10 различными географическими точками. Я столкнулся с трехголовым адом, который у некоторых из вас уже есть.
Есть лиспособ получить из удаленной переменной оболочки HPUX следующую удаленную информацию:
- zoneinfo (Country / City)
- UTC + смещение (я могу легко получить это из zoneinfo)
Пока что лучшее, что я мог получить, - это сокращенный часовой пояс ОС (этого достаточно, чтобы итеративно пересечь удаленное время с помощью статически построенной коллекции pytz.common_timezones и выполнить обратное преобразование сокращенных зон в Country / City или I 'я совершенно не в том направлении?)
Я могу легко получить смещение после получения Страны / Города (чего у меня нет)
datetime.now(pytz.timezone('Asia/Dili')).strftime('%Z %z')
'TLT + 0900'
- получить удаленный сокращенный часовой пояс,
(у Linux гораздо более вменяемый
grep "ZONE=" /etc/sysconfig/clock
вывод, например,
ZONE = "Europe / London"
пока HP-UX / etc / TIMEZONE uses сокращенные часовые пояса, такие как
TZ = CAT-2
Я бы использовал echo $ TZ, который выводил бы немного больше полезных данных, таких как CAT-2, но некоторые удаленные HP-UX даже не настроили этотаким образом, заставляя меня полагаться на неоднозначную дату RFC822,
date +%z
CAT
Я посмотрел оба на pytz, datetime.datetime, email.Utils, но, учитывая, что это не может сделать напрямуюпреобразование из сокращенного времени в zoneinfo Страна / Город (pytz допускает обратное)
Стоит ли просто поцарапать этот квест Don Quixote по автообнаружению удаленного часового пояса и просто добавить раскрывающийся список Страна / Город при принятии ввода пользователя, регистрирующего удаленный хост?
РЕДАКТИРОВАТЬ (частичное решение)
на основе ответа @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)