2011-09-15 47 views
1

因此,我有一个代码可以接收移动设备的相关信息,例如电话号码,姓名和消息,通过它可以发送SMS消息。此外,还有一项延迟SMS的功能。因此,用户可以选择稍后使用下拉菜单发送消息。此外,延迟功能检查是否在上午12:00至上午8:00之间发送消息的时间,如果是,则返回默认的上午8:00,以便接收机将在上午8:00在最早的。然而,我面临的问题是时间延迟是根据Mountain Daylight Time(加拿大/美国)计算的,这意味着生活在PDT时区的人们将在早上7:00(小时过早)收到消息,而在EDT在上午10:00收到留言(2小时太晚)。所以我想知道是否有一些python代码可能会检测到接收器位于哪个时区,以便他/她能够按时收到消息(如果我选择在内华达州的上午8:00,那么加利福尼亚州的接收器将在上午8:00),给定接收机所在的区域(例如接收机位于加州的代码)。使用Python发送短信;考虑时区的时间延迟

关于如何解决这个问题的任何想法?

谢谢!

回答

0

快速和肮脏:你可以避免这个问题,让用户在事件发生多少小时/分钟后说出问题。那么它们的当地时区是什么并不重要。

更好:如果你必须让手机上的本地时间的能力,以及UTC时间(无论是从手机或从您的服务器),这将告诉你UTC偏移的电话。大部分时间你都可以逃脱。但UTC抵消与当地时区不同。在日光节约或夏季时间边界附近,当您认为UTC偏移与时区相同时,诸如“明天同一时间”这样的想法会中断。

最好:为正确支持政治时区政策,不能替代Olson database。使用Olson意味着你的应用程序有一个供用户设置时区的配置项(例如:America/New_YorkEtc/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 
+0

下面是如何将时间发送到函数: 'strftime(“%Y-%m-%d%H:%M”,localtime(c.edt))' 其中'c.edt = int(time())' 我假设'int(time())'是发送的MDT? 现在使用pytz模块,我将如何确保c.edt始终是给定时区的正确时间? – Saphie

+0

编辑答案... – wberry

0

要准确地知道电话所有者的时区是不可能的,除非您的手机上运行了一些您的手机的代码,因为手机的所有者可能跨越时区旅行。

为了解决这个问题,你可以做两件事情之一....

最佳猜测:这是,使用反向电话查询API,就像看到http://www.phonenumber.com/phone/1-214-213-1234它清楚地告诉你,号码属于因此Texasm最好的猜测是使用德克萨斯时区,它不总是准确的,但它是大部分时间。您需要根据您的使用情况寻找API。

游戏安全:确保您可以在任何时区都不会出现极端的时间,以免受到任何人的干扰。因此可以说你选择中午8点半的时间。那就是太平洋上午6点30分,东部上午9点30分,所以在任何时区都不会太早或太晚。

0

随着时区,最好是猜测和问,因为除非你有类似GPS的设备,否则你可能会猜错。猜测并不是一件容易的事,但值得一提的是改善用户体验。

消息是通过手机通过短信还是网络来安排的?如果来自手机,请使用@Adithya建议的phone lookup API。如果来自网络,请尝试使用像http://www.hostip.info/这样的地理ip服务。然后,您需要找到将地理坐标转换为时区的服务。我不知道我的头顶上有什么,但我相信你可以通过Google搜索找到一些。

另外请记住,手机的IP地址是非常难以地理定位。如果是通过手机使用的网络界面,我可能甚至不会为这条路线而烦恼。尝试HTML5 geo-location

+0

它正在从网上预定。此外,延迟功能将被赋予接收器所在的区域(并且将保留在该区域中)。因此,我们可能不会尝试对移动电话进行地理定位,而是可以通过该地区本身来确定时区的变化?也许我可以尝试使用一些映射工具来弄清楚。但非常感谢您的评论,真的有帮助! – Saphie