I have a datetime object, for which I want to create a date string according to the OS locale settings (as specified e.g. in Windows'7 region and language settings).
Following Python's datetime formatting documentation, I used the %x
format code which is supposed to output "Locale’s appropriate date representation.". I expect this "representation" to be either Windows "short date" or "Long date" format, but it isn't either one.
(I have the short date format set to d/MM/yyyy
and the long date format to dddd d MMMM yyyy
, but the output is dd/MM/yy
)
What's wrong here: the Python documentation, the Python implementation, or my expectation ? (and how to fix?)
Is your locale set in your script? If you call
locale.getlocale()
, is the result expected? Compare below:Note that there are bugs in the
datetime
module, mostly because of bugs in the underlying C libraries. On my installation (latest OS X), for example, the formatting string%z
is completely unavailable.On Windows, the syntax of locale strings available to
setlocale()
follows a different syntax than on *nix platforms. A list is here on MSDN.And if you just wish to set your script to whatever default locale your users have installed (in mine: UK English), you just do this at the beginning of the main script. Don't do it in modules, as it overrides a global variable:
After reading the setlocale() documentation, I understood that the default OS locale is not used by Python as the default locale. To use it, I had to start my module with:
Alternatively, if you intend to only reset the locale's time settings, use just
LC_TIME
as it breaks many fewer things:Surely there will be a valid reason for this, but at least this could have been mentioned as a remark in the Python documentation for the %x directive.