2017-02-12 2 views
0

Ich habe eine Liste von Benutzern angezeigt:Anpassen Zeitzonen für Benutzer mit pytz, Datetime und Python 3

tom, 0530, eastern 
dick, 0745, pacific 
harry, 0915, central 
ect... 

Ich brauche ihnen eine E-Mail zu diesem bestimmten Zeitpunkt zu senden (oder innerhalb von 5 Minuten) für ihre Zeitzone. Ich habe an einem Python-Skript gearbeitet, das ich alle 5 Minuten mit Cron ausführen würde.

## pseudo code: 
for user in users: 
    if difference of usertime and utctime is <= 5 minutes: 
    send email 

Ich bin immer in der Nähe, aber die Mathematik mit den konvertierten Zeitzonen zu tun ist, wo ich jetzt bin stecken.

Code:

import datetime 
import pytz 
today = datetime.datetime.now().date() 
user1 = pytz.timezone('US/Eastern').localize(datetime.datetime(today.year, today.month, today.day, 5, 30)) 
now_utc = datetime.datetime.now(pytz.timezone('UTC')) 
user1_converted = user1.astimezone(pytz.timezone('UTC')) 
now_utc - user1_converted 
##maths 
+0

Warum speichern Sie nicht jedes Mal in der gleichen Zeitzone (UTC zum Beispiel)? –

Antwort

1

Wir nennen dies „macht einen Berg aus einem Maulwurfshügel“ :)

Es klingt wie Sie Benutzereinstellungen für die Zeit haben, möchten sie per E-Mail zu, und die Zeitzone, zu der sie gehören.

z. tom = ('US/Eastern', "09:15")

Wenn Ihr Skript ausgeführt wird, muss zuerst die aktuelle Uhrzeit in UTC ermittelt werden.

Dann müssen Sie die aktuelle Uhrzeit des Benutzers und die bevorzugte Zeit in die UTC-Zeit konvertieren. From this question.

tz = timezone('US/Pacific') 
def toUTC(d): 
    return tz.normalize(tz.localize(d)).astimezone(pytz.utc) 

Nachdem Sie dies getan haben, können Sie das eine vom anderen subtrahieren und zu Ihrem eingestellten Schwellwert (5 Minuten) zu vergleichen, um zu sehen, ob es die richtige Zeit ist, die E-Mail zu senden.

Verwandte Themen