所以我有一个代码,可以接收移动设备的相关信息,例如电话号码,姓名和消息,通过它可以发送短信。此外,还有一种延迟SMS的功能。因此,用户可以选择稍后使用下拉菜单发送消息。此外,延迟功能检查在上午12:00至上午8:00之间是否发送消息的时间,如果是,则返回默认的上午8:00,以便接收方将在上午8:00收到消息。最早的。然而,我面临的问题是时间延迟是山区日光时间(加拿大/美国),这意味着生活在PDT时区的人们将在美国东部时间上午7:00(太早)时收到消息上午10:00收到消息(太晚2小时)。所以我想知道是否有一些python代码可能会检测到接收者所在的时区,以便他/她按时收到消息(如果我在内华达州选择上午8:00,那么加利福尼亚的接收者将收到消息在PDT的上午8:00,给定接收器所在的区域(例如,给出接收器位于加利福尼亚的代码)。
关于如何解决这个问题的任何想法?
谢谢!
答案 0 :(得分:0)
要准确了解手机拥有者的时区是不可能的,除非您的手机上运行了一些手机代码,因为手机的所有者可能跨越时区。
要解决这个问题,你可以做两件事之一......
最好的猜测:这是,使用反向电话查找API,比如看http://www.phonenumber.com/phone/1-214-213-1234它清楚地告诉你这个号码属于德克萨斯州因此最好的猜测是使用德州时区,它并不总是准确但是这是大多数时候。您需要根据您的使用情况寻找API。
安全玩耍:确保您可以在任何时区内进行非常极端的交付,以免造成任何人受到干扰。因此,假设您选择中部时间上午8:30。太平洋时间早上6:30,东部时间早上9:30,所以在任何时区都不会太早或太晚。
答案 1 :(得分:0)
对于时区,最好是猜测和询问,因为除非你有类似GPS的设备,否则你可能猜错了。猜测并不是一件容易的事,但值得改善用户体验。
是通过短信还是网络从手机安排消息?如果是通过手机,请使用像@Adithya建议的phone lookup API。如果是来自网络,请尝试像http://www.hostip.info/这样的地理IP服务。然后,您需要找到将地理坐标转换为时区的服务。我不知道我的头脑中有什么,但我相信你可以通过谷歌搜索找到一些。
另外请记住,移动电话的IP地址非常难以进行地理定位。如果它是从手机上使用的网络界面,我可能甚至不会打扰这条路线。试试HTML5 geo-location。
答案 2 :(得分:0)
快速和肮脏:您可以通过让用户在事件应该发生多少小时/分钟后说出来解决问题。那么他们当地的时区是什么并不重要。
更好:如果您能够通过电话获取本地时间,以及UTC时间(来自手机或服务器),那将告诉您手机的UTC偏移。大部分时间你都可以逃脱。但UTC偏移与本地时区不同。在夏令时或夏令时边界附近,当你假设UTC偏移量与时区相同时,“明天同一时间”这样的想法会中断。
最佳:为了正确支持政治时区政策,Olson database无法替代。使用Olson意味着您的应用程序具有供用户设置其时区的配置项(示例:America/New_York
和Etc/UTC
)。您可以根据手机的UTC偏移量和手机号码(使用其他答案中详述的查找表)为此选择默认值,并在大多数情况下保持正确。
在Python中,pytz
模块为您提供了一个非常干净的API,可以使用Olson数据库来处理datetime
个对象。
编辑:在给定时区对象的情况下,此函数会将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