Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Datum en tijd in het Nederlands (of andere taal dan Engels) in Python  (gelezen 239 keer)

Volgens de documentatie van Python https://docs.python.org/3/library/datetime.html?highlight=strftime#strftime-strptime-behavior zou het formaat "%a" de afgekorte versie van de weekdag terug moeten geven in de taal van je 'locale'.

Als het goed is heb ik die op Nederlands/Nederland staan:
erik@erik-desktop:~$ locale
LANG=nl_NL.UTF-8
LANGUAGE=nl:en_US
LC_CTYPE="nl_NL.UTF-8"
LC_NUMERIC=nl_NL.UTF-8
LC_TIME=nl_NL.UTF-8
LC_COLLATE="nl_NL.UTF-8"
LC_MONETARY=nl_NL.UTF-8
LC_MESSAGES="nl_NL.UTF-8"
LC_PAPER=nl_NL.UTF-8
LC_NAME=nl_NL.UTF-8
LC_ADDRESS=nl_NL.UTF-8
LC_TELEPHONE=nl_NL.UTF-8
LC_MEASUREMENT=nl_NL.UTF-8
LC_IDENTIFICATION=nl_NL.UTF-8
LC_ALL=

Het volgende stukje Python blijft echter stug de Engelse dag gebruiken.
python3 -c "import locale;import datetime;print(locale.getlocale());print(datetime.date.today().strftime('%a %A'))"
Geeft:
('nl_NL', 'UTF-8')
Fri Friday

Vergelijking met het commando date:
erik@erik-desktop:~$ date
vr 16 sep 2022 14:09:47 CEST

Wat zie ik over het hoofd in het Pythonscript?
« Laatst bewerkt op: 2022/09/16, 14:19:51 door erik1984 »

Offline MKe

  • Lid
Re: Datum en tijd in het Nederlands (of andere taal dan Engels) in Python
« Reactie #1 Gepost op: 2022/09/16, 15:13:42 »
volgens mij is alleen %c, %x en %X in locale format. Misschien kun je het met regex uit %c halen? Ik heb zelf geen enkele computer die in het Nederlands staat, dus ik kan het niet testen.

re.match(r"^(?P<dag>.+?) .*", datetime.now().strftime("%c")).groupdict()["dag"]

edit:
blijkbaar kan ik toch locale zetten, ik vermoed dat je python eerst moet vertellen welke locale je wilt gebruiken.
>> import locale
>> locale.setlocale(locale.LC_TIME, "nl_NL")
>> datetime.now().strftime("%a")
'vr'

« Laatst bewerkt op: 2022/09/16, 15:19:00 door MKe »
Mijn blokkendoos blog: http://mke21.wordpress.com/

Offline bart85

  • Lid
Re: Datum en tijd in het Nederlands (of andere taal dan Engels) in Python
« Reactie #2 Gepost op: 2022/09/16, 15:46:59 »
https://docs.python.org/3/library/locale.html
Het volgende gevonden op bovenstaande link. Het geeft de locale van het systeem aan.
>>> import locale
>>> locale.getdefaultlocale()
Relying on complex tools to manage and build your system is going to hurt the end-users. [...] "If you try to hide the complexity of the system, you'll end up with a more complex system". Layers of abstraction that serve to hide internals are never a good thing. Instead, the internals should be designed in a way such that they NEED no hiding.

— Aaron Griffin

Re: Datum en tijd in het Nederlands (of andere taal dan Engels) in Python
« Reactie #3 Gepost op: 2022/09/16, 15:49:04 »
Bedankt voor het meedenken! c% geeft bij mij ook de Engels  weekdag aan.

In de interactieve shell krijg ik een error met setlocale:
>>> locale.setlocale(locale.LC_TIME, "nl_NL")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.10/locale.py", line 620, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting

Misschien heeft het met de versie te maken? Ga nog even verder zoeken
« Laatst bewerkt op: 2022/09/16, 15:51:49 door erik1984 »

Re: Datum en tijd in het Nederlands (of andere taal dan Engels) in Python
« Reactie #4 Gepost op: 2022/09/16, 15:50:35 »
https://docs.python.org/3/library/locale.html
Het volgende gevonden op bovenstaande link. Het geeft de locale van het systeem aan.
>>> import locale
>>> locale.getdefaultlocale()

Jij ook bedankt! Dat lijkt ook de goede locale aan te geven:

>>> import locale
>>> locale.getdefaultlocale()
('nl_NL', 'UTF-8')

Re: Datum en tijd in het Nederlands (of andere taal dan Engels) in Python
« Reactie #5 Gepost op: 2022/09/16, 15:59:07 »
@MKe

Blijkbaar heb ik locale "nl_NL" niet. Alleen "nl_NL.utf8" volgens
locale -a

Met
locale.setlocale(locale.LC_TIME, "nl_NL.utf8")
Werkt het bij mij ook.

Mogelijk dat Python die van het systeem niet automatisch overneemt voor datum en tijd.

Aanvulling: Het volgende werkt ook (dan hoeft setlocale niet meer). Nu nog uitzoeken waarom het niet automatisch goed gaat. Zie het voorlopig maar als een fout in de configuratie van de locales aan mijn kant.
env -i LC_TIME="nl_NL.utf8" python3

Laatste aanvulling: Oplossing!

https://docs.python.org/3/library/locale.html#locale.setlocale

locale.setlocale(locale.LC_ALL, "")
Aan het begin van mijn programma doet het 'm
« Laatst bewerkt op: 2022/09/16, 16:40:06 door erik1984 »