Python - Удаленные хосты временной зону против местного

StackOverflow https://stackoverflow.com/questions/5803290

  •  24-10-2019
  •  | 
  •  

Вопрос

Я строю веб -фронт для мониторинга удаленных журналов,
Необходимо управлять около 10 различными географическими местами, которые я столкнулся с тремя головами, у некоторых из вас уже есть.

Есть ли способ получить от удаленной переменной оболочки HPUX Следующая удаленная информация:

  • ZoneInfo (страна/город)
  • UTC + Offset (я могу легко получить это от 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-UXES даже не настроены, таким образом, заставляя меня полагаться на неоднозначную дату RFC822,

date +%z  

КОШКА

Я посмотрел как на pytz, datetime.datetime, email.utils, но, учитывая, что это не может быть напрямую конвертироваться с сокращенного времени в страну/город ZoneInfo (PYTZ позволяет противоположность)
Должен ли я просто поцарапать этот квест Don Quixote, чтобы автоматически открывать для себя удаленный часовой пояс и просто добавить раскрывающееся список Country/City при принятии пользовательского ввода, регистрируя удаленный хост?

Изменить (частичное решение)

Строительство на @mike pennington answer

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, как это ...

В качестве смещения по Гринвичу, игнорируя DST

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

Я нахожусь в центральном времени (GMT - 6) Итак, эта доходность -6 в моей системе.

В качестве смещения GMT, включая компенсацию DST

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

Это дает -5 в моей системе.

Вероятно, легче всего перейти со вторым вариантом и использовать его для преобразования этих местных времен HPUX в GMT; Тогда Мангл с pytz как требуется.

РЕДАКТИРОВАТЬ

Если вы работаете с текстовым представлением удаленных (без GMT) временных метров, вероятно, легче работать напрямую с объектами DateTime ... у меня нет HPUX, но я предполагаю, что строка даты аналогична моей Debian Squeeze System.

>>> 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