2011-09-15 42 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