2015-06-27 5 views
6

मेरे पास उनके स्थान डेटा वाले लोगों का एक विशाल डेटासेट है। मेरे मॉड्यूल में से एक केवल इस डेटासेट के माध्यम से जाता है और टाइमज़ोन पर स्थान डेटा मैप करने के लिए मेरे डेटाबेस में एक टेबल उत्पन्न करता है। यह मॉड्यूल geocoders, tzwhere, और puts.timezone का उपयोग करता है। उसके बाद, जब भी व्यवस्थापक इन लोगों को ईमेल भेजना चाहता है, तो मेरा Django एप्लिकेशन प्रत्येक व्यक्ति के लिए वर्तमान समय की पहचान करने के लिए उस टाइमज़ोन मैपिंग तालिका का उपयोग करता है और व्यवस्थापक को रिपोर्ट करता है कि क्या उन्हें ईमेल भेजने का अच्छा समय नहीं है।शहर और राज्य में पाइथन वर्तमान समय, या देश

स्थान डेटा में शहर और राज्य या देश के नाम शामिल हैं।

इस प्रयोजन के लिए, मैं निम्नलिखित चार पुस्तकालयों संयुक्त:

from datetime import datetime 
from geopy import geocoders 
from tzwhere import tzwhere 
from pytz import timezone 

आदेश समय क्षेत्र मानचित्रण तालिका बनाने के लिए, मेरी मॉड्यूल निम्न नमूना कोड के लिए एक ऐसी ही बात करता है:

g = geocoders.GoogleV3() 
tz = tzwhere.tzwhere() 
locationList = ["Sackville, Canada", "Romania", "Mannheim, Germany", "New Delhi, India", "Trier, Germany", "Basel, Switzerland", "Bruxelles/Brussel, Belgium"] 

for location in locationList: 
    place, (lat, lng) = g.geocode(location) 
    timeZoneStr = tz.tzNameAt(lat, lng) 
    timeZoneObj = timezone(timeZoneStr) 

    # Store timeZoneObj in the timezone mapping table. 

फिर, प्रत्येक बार जब व्यवस्थापक एक ईमेल भेजना चाहता है, तो Django आवेदन प्रत्येक व्यक्ति के टाइमज़ोन के माध्यम से जाता है और वर्तमान क्षेत्र को अपने क्षेत्र में पहचानता है। एक नमूना कोड इस प्रकार है:

# for each person: 
    # find the location and timezoneObj data for this person in the database. 
    now_time = datetime.now(timezoneObj) 
    print now_time 

यहाँ आउटपुट है:

Sackville, Canada : 2015-06-26 22:00:18.131000-03:00 
Romania : 2015-06-27 04:00:18.240000+03:00 
Mannheim, Germany : 2015-06-27 03:00:18.371000+02:00 
New Delhi, India : 2015-06-27 06:30:18.531000+05:30 
Trier, Germany : 2015-06-27 03:00:18.656000+02:00 
Basel, Switzerland : 2015-06-27 03:00:18.812000+02:00 
Bruxelles/Brussel, Belgium : 2015-06-27 03:00:18.921000+02:00 

वहाँ यह करने के लिए किसी भी अधिक कुशल तरीका है?

+0

क्या आपको पता है 'locationlist' समय से आगे है, की तर्ज पर कुछ और प्रयास करें? – IronManMark20

+0

हां। मेरे पास सभी स्थान डेटा सहित एक सीएसवी फ़ाइल है, लेकिन दुर्भाग्यवश स्थान डेटा मानक नहीं है। जैसा कि आप उदाहरण में देख सकते हैं, उनमें से कुछ शहर और राज्य हैं, और अन्य सिर्फ देश के नाम हैं। देश के नामों के मामले में, वे आम तौर पर छोटे देश होते हैं। मैंने मैन्युअल रूप से जांच की और मुझे देशों के संदर्भ में बहुत यकीन है, उनके पास कई समय-क्षेत्र नहीं हैं। – 1man

+2

संबंधित: [पायथन/डीजेगो में शहर से टाइमज़ोन प्राप्त करें] (http://stackoverflow.com/q/16505501/4279) – jfs

उत्तर

1

इस

import datetime 
import pytz 

utc = pytz.utc 
utc_dt = datetime.datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc) 
eastern = pytz.timezone('US/Eastern') 
loc_dt = utc_dt.astimezone(eastern) 
fmt = '%Y-%m-%d %H:%M:%S %Z%z' 
loc_dt.strftime(fmt) 
+0

मुझे वास्तव में समझ में नहीं आया कि इस कोड में आपका क्या मतलब है। मैं वर्तमान समय को किसी शहर या देश में ढूंढने की कोशिश कर रहा हूं। – 1man

संबंधित मुद्दे