2015-06-27 13 views
6

Konum verilerine sahip çok sayıda insan var. Modüllerimden biri bu veri kümesini yalnızca ONCE üzerinden yürütür ve veri tabanımdaki konum verilerini zaman dilimi ile eşleştirmek için bir tablo oluşturur. Bu modül geocoders, tzwhere ve puts.timezone kullanır. Bundan sonra, yöneticinin bu kişilere e-posta göndermek istediği her seferinde, Django uygulamam, her bir kişinin geçerli saatini belirlemek için o saat dilimi eşleme tablosunu kullanır ve e-posta göndermek için iyi bir zaman değilse, yöneticiyi raporlar.Python Şehir ve Eyalet veya Ülke veya Şehirde Geçerli Saat

Konum verileri şehir ve eyalet veya ülke adlarını içerir. Bu amaçla

, şu dört kütüphaneleri kombine:

zaman dilimi eşleştirme tablosunu oluşturmak amacıyla
from datetime import datetime 
from geopy import geocoders 
from tzwhere import tzwhere 
from pytz import timezone 

, benim modül aşağıdaki örnek koda benzer bir şey yapar:

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. 

Ardından, yönetici her e-posta göndermek istediğinde, Django uygulaması her kişinin saat diliminden geçer ve bulunduğu bölgedeki geçerli saati tanımlar.

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

İşte çıkışı: Bir örnek kod aşağıdaki gibidir Bunu yapmanın bir daha verimli bir şekilde

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 

var mı?

+0

çizgisinde bir şey daha deneyin? – IronManMark20

+0

Evet. Tüm konum verilerini içeren bir csv dosyası var, ancak maalesef konum verileri standart değil. Örnekte gördüğünüz gibi, bazıları şehir ve eyalet, diğerleri ise sadece ülke adlarıdır. Ülke isimleri durumunda, genellikle küçük ülkelerdir. Manuel olarak kontrol ettim ve ülkeler açısından oldukça eminim, onların içinde çok sayıda zaman dilimi yok. – 1man

+2

ile ilgili: [Python/Django'daki Şehirden Saat Dilimi Alın] (http://stackoverflow.com/q/16505501/4279) – jfs

cevap

1

Eğer `locationlist` vaktinden ne olduğunu biliyor musunuz bu

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

Bu kodda ne demek istediğini anlamadım. Bir şehir veya ülkede şu anki zamanı bulmaya çalışıyorum. – 1man

İlgili konular