Lütfen kodumun nesi var:
import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d, "%Y-W%W")
print(r)
"2013-01-01 00:00:00" ekranını görüntüleyin, Teşekkürler.
Lütfen kodumun nesi var:
import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d, "%Y-W%W")
print(r)
"2013-01-01 00:00:00" ekranını görüntüleyin, Teşekkürler.
Yanıtlar:
Tarih oluşturmak için bir hafta numarası yeterli değildir; haftanın bir gününe de ihtiyacınız var. Varsayılan ekleyin:
import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d + '-1', "%Y-W%W-%w")
print(r)
-1
Ve -%w
desen o hafta Pazartesi günü almaya ayrıştırıcı söyler. Bu çıktılar:
2013-07-01 00:00:00
%W
Pazartesi, haftanın ilk günü olarak kullanılır. Hafta içi gününüzü kendiniz seçebilirken, bundan saparsanız beklenmedik sonuçlar elde edebilirsiniz.
Belgelerdeki strftime()
ve strptime()
davranış bölümüne bakın , dipnot 4:
strptime()
Yöntemle birlikte kullanıldığında%U
ve%W
sadece haftanın günü ve yılı belirtildiğinde hesaplamalarda kullanılır.
Hafta numaranız bir ISO hafta tarihiyse , %G-W%V-%u
bunun yerine kullanmak isteyeceğinizi unutmayın ! Bu direktifler Python 3.6 veya daha yenisini gerektirir.
if d.endswith('-W0') and r.day == 7: raise ValueError('Invalid date string, No week 0 in {}'.format(r.year))
Diğer yanıtları tamamlamak için - ISO hafta numaralarını kullanıyorsanız , bu dize uygundur (verilen bir ISO hafta numarasının Pazartesi gününü elde etmek için):
import datetime
d = '2013-W26'
r = datetime.datetime.strptime(d + '-1', '%G-W%V-%u')
print(r)
%G
, %V
, %u
ISO eşdeğerleri olan %Y
, %W
, %w
bu çıkışların böylece:
2013-06-24 00:00:00
Python 3.6+ sürümünde mevcuttur; dan docs .
Python 3.8'de kullanışlıdır datetime.date.fromisocalendar
:
>>> from datetime import date
>>> date.fromisocalendar(2020, 1, 1) # (year, week, day of week)
datetime.date(2019, 12, 30, 0, 0)
Eski Python sürümlerinde (3.7-), hesaplama, datetime.date.isocalendar
ISO8601 ile uyumlu haftaları bulmak için kaynağından alınan bilgileri kullanabilir :
from datetime import date, timedelta
def monday_of_calenderweek(year, week):
first = date(year, 1, 1)
base = 1 if first.isocalendar()[1] == 1 else 8
return first + timedelta(days=base - first.isocalendar()[2] + 7 * (week - 1))
Her ikisi de ile çalışır datetime.datetime
.
import datetime
res = datetime.datetime.strptime("2018 W30 w1", "%Y %W w%w")
print res
Hafta günü olarak 1'in eklenmesi, geçerli hafta başlangıcını tam olarak verecektir. Timedelta (gün = 6) eklemek size hafta sonunu verecektir.
datetime.datetime(2018, 7, 23)
res = datetime.datetime.strptime("2018 W30 w1", "%Y W%W w%w")
Yıllık hafta sayısına sahipseniz, sadece hafta sayısını yılın ilk gününe ekleyin.
>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> week = 40
>>> year = 2019
>>> date = datetime.date(year,1,1)+relativedelta(weeks=+week)
>>> date
datetime.date(2019, 10, 8)
İşte bu kullanışlı fonksiyon sıfır haftaya konuyla dahil.