Ich habe einen riesigen Datensatz von Menschen mit ihren Standortdaten. Eines meiner Module durchläuft dieses Dataset nur EINMAL und erzeugt eine Tabelle in meiner Datenbank, um die Standortdaten der Zeitzone zuzuordnen. Dieses Modul verwendet Geocoder, tzwhere und puts.timezone. Jedes Mal, wenn der Administrator E-Mails an diese Personen senden möchte, verwendet meine Django-Anwendung diese Zeitzonenzuordnungstabelle, um die aktuelle Zeit für jede Person zu identifizieren, und meldet dem Administrator, wann es keine gute Zeit ist, ihnen E-Mails zu senden.Python Aktuelle Zeit in einer Stadt und Bundesland oder Land
Die Standortdaten enthalten Stadt und Bundesland oder Ländernamen.
Zu diesem Zweck kombinierte ich die folgenden vier Bibliotheken:
from datetime import datetime
from geopy import geocoders
from tzwhere import tzwhere
from pytz import timezone
Um die Zeitzone-Zuordnungstabelle, mein Modul hat eine ähnliche Sache mit dem folgenden Beispielcode zu generieren:
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.
Jedes Mal, wenn der Administrator eine E-Mail senden möchte, durchläuft die Django-Anwendung die Zeitzone jeder Person und identifiziert die aktuelle Zeit in ihrer Region. Ein Beispielcode ist wie folgt:
# for each person:
# find the location and timezoneObj data for this person in the database.
now_time = datetime.now(timezoneObj)
print now_time
Hier ist die Ausgabe:
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
Gibt es eine effizientere Art und Weise, dies zu tun?
Wissen Sie, was 'locationlist' vor der Zeit ist? – IronManMark20
Ja. Ich habe eine CSV-Datei mit allen Standortdaten, aber leider sind die Standortdaten nicht Standard. Wie Sie in dem Beispiel sehen können, sind einige von ihnen Stadt und Staat, und die anderen sind nur Ländernamen. Bei den Ländernamen handelt es sich meist um kleine Länder. Ich habe das manuell überprüft und bin ziemlich sicher in Bezug auf die Länder, sie haben nicht mehrere Zeitzonen in ihnen. – 1man
verwandt: [Holen Sie Zeitzone von Stadt in Python/Django] (http://stackoverflow.com/q/16505501/4279) – jfs