Brug python datetime.datetime.strptime på windows med BST tidszone

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har brug for at analysere mange forskellige datoer i mange forskellige formater. Jeg har problemer med følgende og spekulerede på, om nogen kunne forklare hvorfor;


Følgende arbejder på et Linux-system:


from datetime import datetime
datetime.strptime('Tue 23 Aug 2011 09:00:07 PM BST','\%a \%d \%b \%Y \%H:\%M:\%S \%p \%Z')


Men det løber under vinduer


ValueError: tidsdata matcher ikke format


Men hvis jeg prøver GMT ikke BST på Windows, fungerer det fint;


from datetime import datetime
datetime.strptime('Tue 23 Aug 2011 09:00:07 PM GMT','\%a \%d \%b \%Y \%H:\%M:\%S \%p \%Z')


Er der en grund til, at python ikke forstår BST-tidszonen under Windows, men det fungerer fint under Linux?


tak,


Matt.

Bedste reference


Efter min opfattelse er det ikke en god praksis at analysere en trebogstavs tidszonekode som denne (medmindre du selvfølgelig ikke har noget valg). For eksempel anvendes 'EST' almindeligvis i USA til UTC-4/5 og bruges også normalt i Australien. Så enhver støtte til 'EST' skal derfor være afhængig af lokalitet. Det ville ikke overraske mig, hvis 'BST' var ligeledes tvetydig.


Jeg anbefaler stærkt at bruge modulet pytz, hvor britisk civil tid er givet strengenidentifikatoren Europe/London, og UTC hedder Etc/UTC. API'en pytz vil give konsistente resultater uanset hvor brugeren eller systemet bruger applikationen. [9]


Hvis du arbejder på en brugerflade, der skal binde til en lokal eller parsere input med formater, kan du ikke ændre det, så overvej at bruge en ordbog med forkortelser til pytz tidszoneobjekter. For eksempel: {'BST': 'Europe/London'}. Derefter kan din ansøgning arbejde med UTC-datoer og gange ensartet, hvilket i høj grad reducerer muligheden for fejl.