Seite 1 von 1

Weekday - Herausfinden, an welchem Wochentag ein Datum ist

Verfasst: Samstag 29. August 2009, 23:42
von snafu
Hi,

vielleicht brauchen das andere außer mir auch manchmal.

Mal ein verschwörerisches Beispiel:

Code: Alles auswählen

$ weekday 23.5.84
Mittwoch
http://paste.pocoo.org/show/137025/

Falls übrigens jemand auf das Programm ``date`` verweisen will:

Code: Alles auswählen

$ date --date=23.5.84 +%A
date: ungültiges Datum „23.5.84

Verfasst: Sonntag 30. August 2009, 08:49
von BlackJack
@snafu: Du musst `date` das Datum halt im richtigen Format geben:

Code: Alles auswählen

bj@s8n:~$ date --date=1984-05-23 +%A
Wednesday
Ansonsten hat Dein Snippet das Problem, dass `locale.getdefaultlocale()` keinen Wert zurückgeben muss, den man auch zum Setzen verwenden kann. Und das passiert in sovielen Fällen, dass der übliche Weg die im System eingestellte "locale" zu setzen, eben *nicht* über diese Funktion geht, sondern einfach eine leere Zeichenkette an dieser Stelle verwendet.

Verfasst: Sonntag 30. August 2009, 09:01
von hendrikS
Also ich hätt's bestenfalls als Snippet verkauft für ne Sache die ja eigentlich ein Einzeiler, höchstens Zweizeiler ist.

Verfasst: Sonntag 30. August 2009, 09:15
von snafu
Ich hab mich im Forum vertan. Kann von mir aus verschoben werden.

@BlackJack: Richtig, meines Wissens kann man ``date`` keine eigenen Formate zum Parsen mitgeben. Darum ging's hauptsächlich.

Also bei mir steht ``locale.LC_TIME`` standardmäßig auf ``(None, None)`` und hat beim Testen im Interpreter immer englische Namen zurückgegeben. ``locale.getdefaultlocale()`` erzeugt hier ``('de_DE', 'UTF8')`` und führt zu deutschen Namen.

Verfasst: Sonntag 30. August 2009, 09:34
von BlackJack
@snafu: Was bei *Dir* da steht, und ob das bei *Dir* funktioniert, ist eigentlich ziemlich egal. Es gibt viele Systeme, bei denen das eben *nicht* so funktioniert. In der Python-Doku steht:
Applications typically start with a call of

Code: Alles auswählen

import locale
locale.setlocale(locale.LC_ALL, '')

Verfasst: Sonntag 30. August 2009, 09:44
von snafu
Das hab ich nicht gelesen. :oops:

Danke für den Hinweis. Mein vorheriger Beitrag war mehr so gemeint, warum ich diesen Weg gegangen bin. Es hat eben geklappt. Wenn ein leerer String "massentauglicher" (im positiven Sinne) ist, dann nutze ich den natürlich. Heraus kommt ja das selbe. :)

Code: Alles auswählen

def date_to_dayname(date):
    """Return the day name based on a date/datetime/time object"""
    old = locale.getlocale(locale.LC_ALL)
    try:
        locale.setlocale(locale.LC_ALL, '')
        return date.strftime('%A')
    finally:
        locale.setlocale(locale.LC_ALL, old)