Datum och tidszoner i Python
Hallå!
Jag har lite problem med Python, och hoppas att någon här kan hjälpa mig.
För att hålla databasen på www.tv-kalendern.se up to date kör jag frekvent scripts som hämtar information om sändningstider från bl.a. tv.com och tvrage.com. Dessa scripts är i dagsläget skrivna i PHP, och exekveras ett antal gånger per timma genom crontab.
Python har vart en het kandidat för nästa pröva-på språk ett tag nu för min del, och för att komma igång beslutade jag mig för att porta dessa scripts till python. Jag har fått ordning på det mesta men har fastnat vid konvertering av datum. Hoppas på hjälp.
För att förklara vad jag vill uppnå visar jag med motsvarande PHP-snutt.
// Alla tider och datum från tv.com är i tidszonen US/Eastern.
// Därför sätter jag serverns lokala tidszon till detta tillfälligt.
date_default_timezone_set('US/Eastern');
// Sändningstid för Prison Break, hämtat från tv.com
$airs = 'Monday 8:00 PM';
// Konvertera datumet till ett unix timestamp, för att enklare kunna lagra,
// ställa frågor mot, och skriva ut i andra tidszoner ('Europe/Stockholm' exempelvis).
// Jag sätter 'utgångsläget' vid epokens början (1 Jan 1970) för att.. glömt. Hjälp?
$airs_time = strtotime($airs, 1);
// Sparas till DB osv. Slut.
// ---------------------------------------------------------------------
// Presenationssida:
// Detta är default tidszon på servern, så denna funktion behöver egentligen inte köras.
// Gör det för att förtydliga att det nu är svensk tid som gäller. : )
date_default_timezone_set('Europe/Stockholm');
// Följande skriver ut 'Tuesday 2:00 AM', vilket är sveriges motsvarighet för 'Monday 8:00 PM'.
echo date('l l G:i A', $airs_time);
Edit: Bör tilläggas att det värde som sparas i $airs_time i detta fallet är 435600. Värdet ligger alltid omkring 0 (relativt sett), och kan vara både positivt och negativt. Allt från t.ex. -68400 till 534900.
Hur gör jag detta i Python?
Jag har petat lite på biblioteket pytz ("pytz - World Timezone Definitions for Python") men vet inte riktigt om, eller hur det bör användas.
Så här långt har jag kommit:
import time
# Sändningstid från tv.com
airs = 'Monday 08:00 PM'
# Läs in till en "time tuple"
t = time.strptime(airs, '%A %I:%M %p')
# Plocka ut ett unix timestamp ur vår "time tuple"
airs_time = time.strftime("%s", t)
Problemen är att 1) måste sätta lokala tidszonen till US/eastern först, och 2) ett veckodagsnamn och en tidpunkt är inte tillräcklig information för att kunna skapa ett fullständigt unix timestamp, så allting blir knasigt om jag inte gör som i php och definerar en utgångspunkt. Går det?
Eller kan man lösa det snyggare, mer pythonaktigt, på något annat sätt?