2014-03-26 9 views
5

sagen, dass ich zu einem bestimmten Datum suchen:Rounding Daten in Python

from datetime import date, timedelta 
days_to_substract = 65 
my_date = date.today()-timedelta(days=days_to_subtract) 

Wie finde ich:

  1. Das Datum der Monday Recht vor my_date (wenn my_date ist kein Montag)
  2. Das Datum der nächsten Monday-my_date

Gibt es eine Möglichkeit, Daten in datetime zu runden?

Antwort

6

können Sie verwenden dateutil

from datetime import * 
from dateutil.relativedelta import * 

days_to_substract = 64 
my_date = (date.today()-timedelta(days=days_to_substract)) 
next=my_date+relativedelta(weekday=MO) 
previous=my_date+relativedelta(weekday=MO(-1)) 
print ('mydate is %s' %my_date) 
print ('next monday is %s' %next) 
print ('previous monday is %s' %previous) 

diff1=my_date-previous 
diff2=next-my_date 
if diff2<diff1: 
    print ('Closest monday is %s' %next) 
else: 
    print ('Closest monday is %s' %previous) 

AUSGABE:

mydate is 2014-01-21 
next monday is 2014-01-27 
previous monday is 2014-01-20 
Closest monday is 2014-01-20 
+0

Ist es nicht genauer zu sagen, dass der nächste Montag ist, und am nächsten wären die zwei von denen mit dem minimalen absoluten Unterschied? – M4rtini

1

Verwendung Wochentag:

from datetime import date, timedelta 
d=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"] 
days_to_substract = 65 
my_date = (date.today()-timedelta(days=days_to_substract)) 
t=my_date.weekday() 
print "Today is ",d[t]," Wait ",(6-t+1)," days for Monday" 

Ausgang:

Today is Monday Wait 7 days for Monday 
+0

'6-t + 1' ist nur' 7-t' :) –

+2

hilft es zu lesen..0 bis 6 für Montag bis Sonntag ... Sorry, wenn es dich stört .... – user3

1

Sie könnten date.weekday (http://docs.python.org/2/library/datetime.html#datetime.date.weekday) verwenden, um den Wochentag-Integer-Wert für "my_date" zu finden. Dann könnten Sie die Differenz des aktuellen Wochentags (z. B. Wochentag = 2 für Mittwoch) verwenden und eine andere Zeitdelta-Berechnung durchführen. Das funktionierte für mich, als ich es ausprobierte:

from datetime import * 

days_to_subtract = 65 
my_date = (date.today() - timedelta(days=days_to_subtract)) 
dow = my_date.weekday() 
monday_my_date = (my_date - timedelta(days=dow)) 

print(monday_my_date) 

Viel Glück!