Belirli bir tarihte, 2011-07-02 tarihine kadar, bu tarihten sonraki bir sonraki Pazartesi gününü (veya bu konuya ait herhangi bir hafta içi gününü) nasıl bulabilirim?Belirli bir tarihten sonra ilk Pazartesi günü için tarihi bul
cevap
import datetime
def next_weekday(d, weekday):
days_ahead = weekday - d.weekday()
if days_ahead <= 0: # Target day already happened this week
days_ahead += 7
return d + datetime.timedelta(days_ahead)
d = datetime.date(2011, 7, 2)
next_monday = next_weekday(d, 0) # 0 = Monday, 1=Tuesday, 2=Wednesday...
print(next_monday)
sonraki Pazartesi 7 günü Pazartesi sonra 6 günü salı sonra, vb, ve ayrıca kullanarak olduğuna kullanılarak
>>> dt = datetime(2011, 7, 2)
>>> dt + timedelta(days=(7 - dt.weekday()))
datetime.datetime(2011, 7, 4, 0, 0)
deneyin o Python'un datetime
türü raporları Pazartesi olarak 0
, ..., Pazar olarak 6
.
hile yapmak gerektiğini düşünüyorum - Bu datetime (2013, 1, 1) "datetime (2013, 1) ile yaklaşan Pazar bulmaya çalıştığınızda , 1) + timedelta (gün = (7 - datetime (2013, 1, 1) .weekday())) "," datetime.datetime (2013, 1, 7, 0, 0) "olsun, bir pazartesi . – fixxxer
@fixxxer - Yanıtda da belirttiği gibi: kod, "datetime" API'sinin birkaç özelliğini, yalnızca pazartesi günleri arıyorsanız, yalnızca çalışacak şekilde kullanır. "Phihag" tarafından sağlanan kod daha geneldir ve yaklaşan herhangi bir günü bulabilir. – Dirk
Timedelta'da 7 yerine 6'nın kullanılmasına yardımcı olacağını düşünüyor musunuz? – fixxxer
Tarihe bir gün eklemeye başlayabilir ve pazartesi günlerinde durabilirsiniz.
>>> d = datetime.date(2011, 7, 2)
>>> while d.weekday() != 0: #0 for monday
... d += datetime.timedelta(days=1)
...
>>> d
datetime.date(2011, 7, 4)
bu ilk sonraki Pazartesi günü, sonra verilen tarih verecektir:
import datetime
def get_next_monday(year, month, day):
date0 = datetime.date(year, month, day)
next_monday = date0 + datetime.timedelta(7 - date0.weekday() or 7)
return next_monday
print get_next_monday(2011, 7, 2)
print get_next_monday(2015, 8, 31)
print get_next_monday(2015, 9, 1)
2011-07-04
2015-09-07
2015-09-07
listesi ile anlama?
from datetime import *
[datetime.today()+timedelta(days=x) for x in range(0,7) if (datetime.today()+timedelta(days=x)).weekday() % 7 == 0]
(0 at the end is for next monday, returns current date when run on monday)
weekday = 0 ## Monday
dt = datetime.datetime.now().replace(hour=0, minute=0, second=0) ## or any specific date
days_remaining = (weekday - dt.weekday() - 1) % 7 + 1
next_dt = dt + datetime.timedelta(days_remaining)
Burada biraz üzerinde ağır cevaplara bir öz ve jenerik bir alternatiftir.
# Returns the date of the next given weekday after
# the given date. For example, the date of next Monday.
onDay = lambda date, day: date + datetime.timedelta(days=(day-date.weekday()+7)%7)
Bu cevap upvotes toplamak için çok geç geldi, ama benim favorim. – ASalazar
Son derece temiz, oy hakkım var. – Liquidgenius
Bir diğer basit ve zarif çözüm pandas ofsetlerini kullanmaktır.
Tarihleri ile oynarken çok yararlı ve sağlam buluyorum.
- İlk Pazar gününü istiyorsanız, frekansı frek = 'W-SUN' olarak değiştirin.
- Birkaç sonraki Pazar gününü isterseniz, ofsetleri değiştirin. Gün (gün).
- Pandalar ofsetlerini kullanmak, tatil günlerini görmezden gelmenizi, yalnızca İş Günleri ve daha fazlası ile çalışmanızı sağlar.
Ayrıca, bu yöntemi uygulama yöntemini kullanarak tüm DataFrame'e kolayca uygulayabilirsiniz.
# Getting the closest monday from a given date
closest_monday = pd.date_range(start=date, end=date + offsets.Day(6), freq='W-MON')[0]
# Adding a 'ClosestMonday' column with the closest monday for each row in a pandas df using apply
# Require you to have a 'Date' column in your df
def get_closest_monday(row):
return pd.date_range(start=row.Date, end=row.Date + offsets.Day(6), freq='W-MON')[0]
df['ClosestMonday'] = df.apply(lambda row: get_closest_monday(row), axis=1)
import datetime
d = datetime.date(2011, 7, 2)
while d.weekday() != 0:
d += datetime.timedelta(1)
http://docs.python.org/library/datetime.html#datetime.date.weekday Ayrıca yapabilirdi –