python - Force locale for en funktion at være britisk/engelsk i en enkelt funktion, så datetime.strftime altid returnerer et engelsk format

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skal skrive en meget simpel python-funktion, der accepterer en dato i Excel-format (et helt antal dage forløbet siden 1. januar 1900). Jeg konverterer det til et python datetime.date objekt, og til sidst vil jeg formatere det som en forkortet strengdato (fx 'Jan10' eller 'Mar11') - dybest set datoen i MmmYY format.


dt.strftime( fmt )


Denne funktion fungerer fint i UK & Amerikanske arbejdsstationer, men jeg har bemærket, at på nogle kolleger pc'er, der er sat til en fransk lokalitet, får vi den forkerte anser:


>>> locale.getdefaultlocale()
('fr\_FR', 'cp1252')


På disse maskiner returnerer funktionen ovenfor den formaterede datastreng på fransk som ikke er den ønskede udgang.


Jeg forstår, at jeg kunne bruge locale.setlocale-funktionen til globalt at omdefinere lokaliteten, men det er ikke noget, der er ønskeligt. Andetsteds i systemet er der sandsynligvis scripts, der kræver en modersmålsstat. Jeg ønsker ikke at bryde andres komponent ved at definere en global lokalitet.


Så hvad kan jeg gøre? Kort om at skrive strengformatteringsfunktionen igen, er der en måde, hvorpå jeg kan gøre strftime-funktionen til at producere den s output i UK/US-lokaliteten uden at påvirke andet?


Platform=Python2.4.4 på Windows 32bit


FYI, denne løsning gælder ikke - det ændrer lokalområdet globalt, hvilket er præcis det, jeg vil undgå at gøre:
Formatering af landestandard i Python

Bedste reference


Hvis du har brug for faste strenge, er det nok bedst at oprette en kortlægning af månedens nummer til månedens navn og bare bruge det.


months = {1: 'Jan', 2: 'Feb', ...}

printf '\%s\%02d' \% (months[somedt.month], somedt.year \% 100)

Andre referencer 1


Ja, det er muligt at gøre. Jeg har haft det samme problem ved implementering af en webserver. Jeg ønskede datoen/klokkeslættet at blive vist i klientens webbrowser s lokale, ikke serverens lokale.


I standardbiblioteket er der et lokalt modul. Tjek setlocale () og getlocale ()
metoder, specifikt med kategorien LC\_TIME. Du vil sandsynligvis bruge getlocale () for at få den eksisterende lokalitet, så setlocale for at indstille den til noget som 'EN\_US' eller 'C' og derefter kalde strftime-metoden og endelig genoprette den tidligere lokale med et andet setlocale () opkald .