Отправка SMS-сообщения с использованием Python;Задержка с учетом часового пояса - PullRequest
1 голос
/ 15 сентября 2011

Итак, у меня есть код, который получает соответствующую информацию для мобильного устройства, такую ​​как номер телефона, имя и сообщение, с помощью которого оно может отправлять SMS-сообщения.Также есть функция, которая задерживает смс.Таким образом, пользователь может отправить сообщение позже, используя раскрывающееся меню.Кроме того, функция задержки проверяет, будет ли время отправки сообщения с 12:00 до 8:00, и если это так, то по умолчанию будет возвращено 8:00, чтобы получатель получил сообщение в 8:00 утра.ранний.Однако проблема, с которой я сталкиваюсь, заключается в том, что временная задержка выражена в виде летнего времени в горах (Канада / США), что означает, что люди, живущие в часовом поясе PDT, получат сообщение в 7:00 (слишком рано), в то время как люди в EDTполучить сообщение в 10:00 (на 2 часа позже).Поэтому мне было интересно, есть ли какой-нибудь код Python, который потенциально может определить, в каком часовом поясе находится получатель, чтобы он / она получал сообщение вовремя (если я выберу 8:00 в Неваде, то получатель в Калифорнии получит сообщение в8:00 утра по тихоокеанскому времени), учитывая область, в которой находится получатель (например, указан код, указывающий, что получатель находится в Калифорнии).

Есть идеи о том, как решить эту проблему?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 15 сентября 2011

С часовыми поясами лучше и угадывать, и спрашивать, потому что, если у вас нет GPS-подобного устройства, вы, вероятно, догадаетесь неправильно.И угадывание - непростая задача, но она того стоит, чтобы улучшить работу ваших пользователей.

Планируются ли сообщения с телефона с помощью SMS или из Интернета?Если с телефона, используйте API поиска телефона , как предлагает @Adithya.Если из Интернета, попробуйте сервис гео-IP, как http://www.hostip.info/.Тогда вам нужно найти сервис, который конвертирует географические координаты в часовые пояса.Я не знаю ни о чем из головы, но я уверен, что вы можете найти некоторые, прибегая к помощи.

Также имейте в виду, что IP-адреса мобильных телефонов общеизвестно трудно найти.Если бы это был веб-интерфейс, используемый с телефона, я бы, вероятно, даже не стал бы беспокоиться об этом маршруте.Попробуйте HTML5 гео-местоположение .

0 голосов
/ 15 сентября 2011

Быстро и грязно : Вы можете избежать этой проблемы, попросив пользователя сообщить, через сколько часов / минут должно произойти событие. Тогда не имеет значения, какой у них часовой пояс.

Лучше : если у вас есть возможность узнать местное время по телефону, а также время UTC (с телефона или с вашего сервера), это сообщит вам Смещение UTC телефона. Вы можете сойти с рук большую часть времени. Но смещение UTC - это НЕ то же самое, что местный часовой пояс. Ближе к границе летнего или летнего времени идеи, такие как «то же самое время завтра», ломаются, если предположить, что смещение UTC совпадает с часовым поясом.

Best : для правильной поддержки политик часовых поясов ничто не может заменить базу данных Olson . Использование Olson подразумевает, что в вашем приложении есть элемент конфигурации, позволяющий пользователю установить свой часовой пояс (примеры: America/New_York и Etc/UTC). Вы можете выбрать значения по умолчанию для этого, основываясь на смещении UTC телефона и номера мобильного телефона (используя таблицы поиска, как подробно описано в других ответах), и большую часть времени будете корректны.

В Python модуль pytz предоставляет вам очень чистый API для использования базы данных Olson для работы с datetime объектами.

EDIT: эта функция преобразует время Unix в локализованный объект datetime, учитывая объект часового пояса:

def localize_epoch_time(epoch_time, timezone=pytz.UTC):
  u"Given an epoch time return an accurate, timezone-aware datetime object"
  t = localtime(epoch_time)
  epochdt = datetime(*(t[:6] + (int((epoch_time - long(epoch_time)) * 1000000), timezone)
  if hasattr(timezone, 'normalize'):  # pytz tzinfo objects have this
    return timezone.normalize(epochdt)
  else: # tzinfo object not from pytz module
    return epochdt
0 голосов
/ 15 сентября 2011

Точно узнать часовой пояс владельца телефона невозможно, если у вас на телефоне не работает ваш код, так как владелец телефона может путешествовать по часовым поясам.

Чтобы решить эту проблему, вы можете сделать одну из двух вещей ...

Наилучшее предположение: используйте API обратного просмотра телефона, например, см. http://www.phonenumber.com/phone/1-214-213-1234. Оно четко говорит о том, что число принадлежит Техасу, поэтому лучшим предположением будет использование часового пояса Техаса, который не всегда точен. но это в большинстве случаев. Вам нужно искать API, основанные на вашем использовании.

Безопасная игра: убедитесь, что вы можете доставить за время, которое не является экстремальным в любом часовом поясе, чтобы никто не беспокоился. Следовательно, допустим, вы выбрали 8:30 по центральному времени. То есть 6:30 утра по тихоокеанскому, и 9:30 утра по восточному, поэтому не слишком рано или не поздно в любом часовом поясе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...