2015-06-27 45 views
6

Ho un enorme set di dati di persone con i loro dati di posizione. Uno dei miei moduli passa attraverso questo set di dati solo una volta e genera una tabella nel mio database per mappare i dati di localizzazione sul fuso orario. Questo modulo utilizza geocoder, tzwhere e puts.timezone. Dopodiché, ogni volta che l'amministratore vuole inviare e-mail a queste persone, la mia applicazione Django utilizza la tabella di mappatura del fuso orario per identificare l'ora corrente per ogni persona e segnala l'amministratore se non è il momento giusto per inviarle.Python Ora corrente in una città e stato o paese

I dati sulla posizione includono città, stato o nomi di paesi.

A tal fine, ho unito i seguenti quattro biblioteche:

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

Al fine di generare la tabella di mapping fuso orario, il mio modulo fa una cosa simile al seguente codice di esempio:

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. 

Quindi, ogni volta che l'amministratore desidera inviare un'e-mail, l'applicazione Django passa attraverso il fuso orario di ogni persona e identifica l'ora corrente nella sua regione. Un codice di esempio è il seguente:

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

Ecco l'output:

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 

Esiste un modo più efficiente per fare questo?

+0

Sai cosa 'locationlist' è prima del tempo? – IronManMark20

+0

Sì. Ho un file csv che include tutti i dati sulla posizione, ma sfortunatamente i dati sulla posizione non sono standard. Come puoi vedere nell'esempio, alcuni di essi sono città e stato, mentre gli altri sono solo nomi di paesi. Nel caso dei nomi dei paesi, di solito sono piccoli paesi. Ho controllato manualmente e sono abbastanza sicuro in termini di paesi, non hanno più fusi orari al loro interno. – 1man

+2

correlati: [Ottieni il fuso orario da City in Python/Django] (http://stackoverflow.com/q/16505501/4279) – jfs

risposta

1

provare qualcosa di più lungo le linee di questo

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

Non ho davvero capito cosa intendi in questo codice. Sto cercando di trovare l'ora corrente in una città o in un paese. – 1man