der User gibt in einem Formular ein Datum TT.MM.JJJJ ein. Ich möchte
jetzt zu diesem Datum einen Tag dazu rechnen bzw. abziehen. Also aus
dem 28.03.2005 soll der 29.03.2005 werden. Gibt es da eine Funktion mit
der sich sowas gelegant lösen lässt? Oder muss ich mir da selber was
zusammenschreiben? Es geht leider nicht so einfach wie ich mir das
dachte. Man muss nämmlich Monatswechsel, Schaltjahre und Jahreswechsel
beachten.
Gruß Arne
Das geht z.B. mit dem Modul 'datetime'.
>>> import datetime as d
>>> print d.date.today()
2005-10-05
>>> print d.date.today() + d.timedelta(1)
2005-10-06
Schöne Grüße, Matthias
na das sieht doch ganz gut aus. Nur wie wandele ich mein Datum so um
damit ich keinen Fehler bekomme?
61 tag_plus1 = datum[2]+"-"+datum[1]+"-"+datum[0]
62 tag_plus1 = tag_plus1 + datetime.timedelta(1)
TypeError: cannot concatenate 'str' and 'datetime.timedelta' objects
args = ("cannot concatenate 'str' and 'datetime.timedelta'
objects",)
gruß arne
RTFM. datetime.datetime.strftime()
MfG Diez
oder ohne, nur mit Bordmitteln (ich weiß allerdings nicht, was zu
Silvester mit Schaltsekunden passiert):
import time
nextday=lambda s:time.strftime('%d.%m.%Y',time.localtime(86400+time.mktime(time.strptime(s,'%d.%m.%Y'))))
Ralf
>>Das geht z.B. mit dem Modul 'datetime'.
>
>
> oder ohne, nur mit Bordmitteln (ich weiß allerdings nicht, was zu
> Silvester mit Schaltsekunden passiert):
'datetime' gehört seit Version 2.3 zu den Bordmitteln...
Matthias
Also mein Datum liegt so vor:
datum = ['06','10','2005']
Wie kann ich das jetzt ändern um es auf den richtigen Datentyp zu
bekommen?
Am Ende sollte es so aussehen:
tag_plus1 = "2005-10-07"
@Ralf: was beudeuted das "s:" in "s:time.strftime" so einen Doppelpunkt
hab ich in Python noch nie gesehen?!?
Danke schonmal,
Gruß Arne
> Also mein Datum liegt so vor:
>
> datum = ['06','10','2005']
>
> Wie kann ich das jetzt ändern um es auf den richtigen Datentyp zu
> bekommen?
>
> Am Ende sollte es so aussehen:
>
> tag_plus1 = "2005-10-07"
Kann man sicher noch schöner aufschreiben, aber auf die Schnelle:
from datetime import datetime,timedelta
datum=[int(x) for x in ['06','10','2005']]
ref_date=datetime(datum[2],datum[1],datum[0])
print ref_date.strftime("%Y-%m-%d")
ref_date_plus_1=ref_date+timedelta(days=1)
print ref_date_plus_1.strftime("%Y-%m-%d")
Gruß,
Achim
Strings in Zahlen konvertieren:
>>> datum = ["06", "10", "2005"]
>>> num_datum = [int(s) for s in datum] # sogenannte "list comprehension"
>>> num_datum
[6, 10, 2005]
Das ist leider nicht die richtige Reihenfolge für datetime.date(). Deshalb
schreibe ich die Bestandteile in separate Variablen:
>>> tag, monat, jahr = num_datum
Damit lässt sich ein Datumsobjekt erzeugen:
>>> import datetime
>>> d = datetime.date(jahr, monat, tag)
>>> d
datetime.date(2005, 10, 6)
Einen Tag hinzuaddieren:
>>> d = d + datetime.timedelta(1)
>>> d
datetime.date(2005, 10, 7)
Für das Standard-Datumsformat genügt eine einfache String-Konvertierung:
>>> str(d)
'2005-10-07'
Andere Formate lassen sich mit strftime erzeugen:
>>> d.strftime("%x")
'10/07/05'
Oops, Python weiß nicht, dass wir in Deutschland sitzen.
>>> import locale
>>> locale.setlocale(locale.LC_ALL, "")
'de_DE.UTF-8'
>>> d.strftime("%x")
'07.10.2005'
Geht doch. Die verfügbaren Formate findest Du unter
http://docs.python.org/lib/module-time.html#l2h-1955
Peter
Gruß Arne
> datum = ['06','10','2005']
Dann entfällt strptime. Den Rest haben andere schon geschrieben.
> @Ralf: was beudeuted das "s:" in "s:time.strftime"
Der gehört zum lambda - schlage mal dessen Syntax nach.
> so einen Doppelpunkt
> hab ich in Python noch nie gesehen?!?
Das ist schlimm.
Ralf
--
GS d->? s:++>+++ a+ C++++ UL+++ UH++ P++ L++ E+++ W- N++ o-- K-
w--- !O M- V- PS+>++ PE Y+>++ PGP+ !t !5 !X !R !tv b+++ DI+++
D? G+ e++++ h+ r? y?