folgendes Problem:
Ich habe Strings, die eine Zeit in UTC (Weltzeit) angeben z.B. :
"2008-01-15 22:32:30"
Desweiteren habe ich einen String, der die Zeitzone angibt, z.B:
"-05:00".
Ich will nun die entsprechende Lokalzeit rausfinden. Das Datum ist
dabei unwichtig,
wichtig ist die Uhrzeit. In welchem Format die geliefert wird ist mir
weitgehend gleichgültig.
Die Lösung einfach in diesem Falle -5 mit 22 zu addieren liefert nicht
immer das richtige Ergebnis, da die DST, sprich die Winter/Sommerzeit
ignoriert wird.
Ich hab mir mal die http://pytz.sourceforge.net/ und die
http://www.egenix.com/products/python/mxBase/mxDateTime/
Bibliotheken angeguckt, mir erschliesst sich aber nicht wie ich diese
(an sich einfach anmutende) Aufgabe damit lösen kann.
Bin für jede Hilfe dankbar
Andreas
> folgendes Problem:
> Ich habe Strings, die eine Zeit in UTC (Weltzeit) angeben z.B. :
> "2008-01-15 22:32:30"
> Desweiteren habe ich einen String, der die Zeitzone angibt, z.B:
> "-05:00".
>
> Ich will nun die entsprechende Lokalzeit rausfinden. Das Datum ist
> dabei unwichtig,
> wichtig ist die Uhrzeit. In welchem Format die geliefert wird ist mir
> weitgehend gleichgültig.
> Die Lösung einfach in diesem Falle -5 mit 22 zu addieren liefert nicht
> immer das richtige Ergebnis, da die DST, sprich die Winter/Sommerzeit
> ignoriert wird.
Öhm, das Format "-05:00" gibt keinerlei Informationen über die Zeitzone her,
sondern nur über die Zeitverschiebung (zu einem bestimmten Zeitpunkt).
Damit hast du keinerlei DST-Information, die du anwenden könntest. Du
brauchst schon sowas wie "PST" oder "Europe/Berlin" um den Kontext der
Zeitverschiebung zu kennen.
nd
--
Winnetous Erbe: <http://pub.perlig.de/books.html#apache2>
> Desweiteren habe ich einen String, der die Zeitzone angibt, z.B:
> "-05:00".
> Die Lösung einfach in diesem Falle -5 mit 22 zu addieren liefert nicht
> immer das richtige Ergebnis, da die DST, sprich die Winter/Sommerzeit
> ignoriert wird.
Dann gibt "-05:00" schlicht nicht den Offset zu UTC an.
Das hier habe ich mal zusammengehakt vor ein paar Wochen, v ist ein
timestamp der Form
YYYY-MM-DDTHH:mm:SS s?H:MM
wobei klein-s ein vorzeichen sein soll.
def convert_timestamp(v):
tz = pytz.utc
prefix = v[:len('2008-01-12T16:48:28')]
timezone_info = v[len('2008-01-12T16:48:28'):]
if timezone_info and timezone_info != "Z":
try:
sign, hours, minutes =
re.match("([+-]?)([0-9]{2}):([0-9]{2})", timezone_info).groups()
except:
print v
raise
hours = int(hours, 10)
if sign == "-":
hours = -hours
minutes = int(minutes, 10)
tz = pytz.FixedOffset(hours * 60 + minutes)
time_tuple = time.strptime(prefix, "%Y-%m-%dT%H:%M:%S")
dt = datetime.datetime(tzinfo=tz, *time_tuple[:6])
return dt
Das *sollte* dir eine Idee geben. Glaube ich... :)
Diez