Tag (numerisch) aus datetime.now().strftime() generieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
lordzwieback
User
Beiträge: 55
Registriert: Montag 2. März 2015, 14:35
Kontaktdaten:

Hallo,

ich habe folgendes Problem mit folgendem Code:

Code: Alles auswählen

today = datetime.now().strftime("%d.%m.%Y")
Hier bekomme ich dann z.B. 08.06.2016 angezeigt, das funktioniert und muss auch in dieser Formatierung vorliegen.

Nun habe ich gesehen, dass ich mir einen bestimmten Wochentag in numerischer Form mittels "%w" ausgeben kann. (0 - 6) Funktioniert dass auch so, dass ich sagen könnte die Variable "today" enthält ein Datum wie oben formatiert und ich kann mir den Wochentag auch so ausgeben lassen?

Versucht habe ich folgendes:

Code: Alles auswählen

today = date.today().strftime("%d.%m.%Y")
weekday = today("%w")
print(weekday)
Traceback:
Traceback (most recent call last):
File "C:/Users/User/PycharmProjects/Test/test.py", line 6, in <module>
weekday = today("%w")
TypeError: 'str' object is not callable

Typerror... Aber sobald ich das Datum so formatiere, wie ich das möchte, wird "today" zwangsmäßig zum String, oder verstehe ich da etwas falsch?
Alternative Vorschläge gerne gesehen.

Schonmal vielen Dank für eure Ratschläge,
lordzwieback
BlackJack

@lordzwieback: Wenn Du eine Zeichenkette erstellst, dann kannst Du damit nur Sachen machen, die man mit einer Zeichenkette machen kann. Und mit einem `datetime`-Objekt kann man nur Sachen machen, die man mit einem `datetime`-Objekt machen kann.

Du müsstest also das Ergebnis des `now`-Aufrufs an einen eigenen Namen binden. Dann kannst Du auf dem Objekt sowohl die `strftime()`-Methode aufrufen, als auch die `isoweekday()`-Methode um tatsächlich an den *numerischen* Tag zu kommen. Formatieren mit %w liefert ja keinen numerischen Wert, sondern auch eine Zeichenkette.

`strftime()` würde ich übrigens nicht mehr verwenden. Das geht auch mit der `format()`-Funktion oder der `format()`-Methode auf Zeichenketten:

Code: Alles auswählen

In [8]: format(now, '%Y-%m-%d')
Out[8]: '2016-06-08'

In [9]: 'Heute ist der {0:%Y-%m-%d}.'.format(now)
Out[9]: 'Heute ist der 2016-06-08.'
Dann braucht man nicht den etwas komischen Namen der zugrunde liegenden Funktion aus der C-Bibliothek.
lordzwieback
User
Beiträge: 55
Registriert: Montag 2. März 2015, 14:35
Kontaktdaten:

BlackJack hat geschrieben:@lordzwieback: Wenn Du eine Zeichenkette erstellst, dann kannst Du damit nur Sachen machen, die man mit einer Zeichenkette machen kann. Und mit einem `datetime`-Objekt kann man nur Sachen machen, die man mit einem `datetime`-Objekt machen kann.

Du müsstest also das Ergebnis des `now`-Aufrufs an einen eigenen Namen binden. Dann kannst Du auf dem Objekt sowohl die `strftime()`-Methode aufrufen, als auch die `isoweekday()`-Methode um tatsächlich an den *numerischen* Tag zu kommen. Formatieren mit %w liefert ja keinen numerischen Wert, sondern auch eine Zeichenkette.

`strftime()` würde ich übrigens nicht mehr verwenden. Das geht auch mit der `format()`-Funktion oder der `format()`-Methode auf Zeichenketten:

Code: Alles auswählen

In [8]: format(now, '%Y-%m-%d')
Out[8]: '2016-06-08'

In [9]: 'Heute ist der {0:%Y-%m-%d}.'.format(now)
Out[9]: 'Heute ist der 2016-06-08.'
Dann braucht man nicht den etwas komischen Namen der zugrunde liegenden Funktion aus der C-Bibliothek.
Alles klar, das werde ich mal testen. Und danke für den Tipp mit der format() Funktion, werde mir das mal anschauen.

Melde mich mit funktionierender Lösung oder mit weiteren Fragen wieder. ;)
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@lordzwieback: wenn Du ein datetime-Objekt vorliegen hast, dann ist der Schritt über den String an den Wochentag zu gelangen unnötig kompliziert, weil man gleich das datetime-Objekt verwenden könnte (ein generelles Vorgehen ist immer, intern mit Objekten des richtigen Typs zu arbeiten und nur für die Ausgabe alles in einen String umzuwandeln; damit wird aber nicht weitergearbeitet).

Hast Du dagegen von extern einen Datumsstring und möchtest zu diesem den Wochentag ermitteln, mußt Du diesen String erst mit der strptime-Methode in ein datetime-Objekt umwandeln.
Antworten