2016-07-05 14 views
0

Ich muss den ersten Tag des letzten Monats von jedem Datum bekommen. Ich weiß, dass ich monthdelta(datetime(2010,3,30), -1) verwenden kann, um letzten Monat zu erhalten, aber es gibt den ersten Tag nicht zurück.Einen Monat von einem Datum in Python subtrahieren?

+1

Warum nicht 'Datetime (2010, 3 - 1, 1) '? – jonrsharpe

+0

Weil ich viel Datum habe '2016-05-13 19:05:38, 2016-06-18 19:05:46, 2016-06-12 19:06:46, 2016-03-13 19:07 : 04, 2016-02-13 19:09:59, 2016-09-13 19:11:11 'und zu allen Datum möchte ich ersten Tag des letzten Monats bekommen – ldevyataykina

Antwort

0

Versuchen Sie folgendes:

from datetime import date 
d = date.today() 
d.replace(
    year=d.year if d.month > 1 else d.year - 1, 
    month=d.month - 1 if d.month > 1 else 12, 
    day=1 
) 
+0

Funktioniert das, wenn der aktuelle Monat Januar ist? – RemcoGerlich

+0

Ich versuche 'df ['used_at']> Daten [i] .replace (Monat = Datum.Monat - 1, Tag = 1)' aber im Gegenzug nur 1 Tag – ldevyataykina

+0

Also, was ist mit Jahr? –

3

Dies kann durch erste Berechnung des ersten Tag des laufenden Monats (oder einem bestimmten Datum) durchgeführt werden, dann ist es mit datetime.timedelta (Tage = 1) subtrahiert, die Sie gibt die letzter Tag des vorherigen Monats.

Zur Demonstration, hier ist ein Beispielcode:

import datetime 

def get_lastday(current): 
    _first_day = current.replace(day=1) 
    prev_month_lastday = _first_day - datetime.timedelta(days=1) 
    return prev_month_lastday.replace(day=1) 
+0

unten gewählt, da die aktuelle Antwort gibt Ihnen den * letzten * Tag des letzten Monats, nicht die * erste * – donkopotamus

+0

@donkopotamus Danke für das Aufzeigen, habe ich einen Fehler gemacht. Ich habe den Beitrag bearbeitet. – purrogrammer

0

wie bereits. Unter Verwendung von datetime und datetutil.

(wenn datetutil nicht verfügbar für Sie pip install python-dateutil installieren)

In [1]: from datetime import datetime 
In [2]: import dateutil.relativedelta 
In [3]: today_date = datetime.now().date() 
In [4]: today_date 
Out[1]: datetime.date(2016, 7, 5) 
In [5]: last_month = today_date - dateutil.relativedelta.relativedelta(months=1) 
In [6]: last_mont_first_date = last_month.replace(day=1) 
In [7]: last_mont_first_date 
Out[2]: datetime.date(2016, 6, 1) 

Eingang:

datetime.date(2016, 7, 5) 

Ausgabe

datetime.date(2016, 6, 1) 
+0

Ich versuche 'df ['used_at']> (dates [i] - dateutil.relativedelta.relativedelta (Monate = 1))). Replace (day = 1)' aber es gibt 'TypeError: replace() ein unerwartetes Schlüsselwort Argument 'Tag' – ldevyataykina

+0

Vorher versuche ich 'df ['used_at']> Daten [i] .replace (Monat = Datum.Monat - 1, Tag = 1)' aber es gibt nur einen Tag – ldevyataykina

+0

Ich denke, Sie versuchen andere Dinge. –

Verwandte Themen