Saya meringkas diskusi menjadi dua langkah:
- Konversi format mentah ke
datetime
objek.
- Gunakan fungsi
datetime
objek atau date
objek untuk menghitung angka minggu.
Pemanasan
`` `python
from datetime import datetime, date, time
d = date(2005, 7, 14)
t = time(12, 30)
dt = datetime.combine(d, t)
print(dt)
`` `
Langkah 1
Untuk menghasilkan datetime
objek secara manual , kita dapat menggunakan datetime.datetime(2017,5,3)
atau datetime.datetime.now()
.
Namun dalam kenyataannya, kita biasanya perlu mengurai string yang ada. kita dapat menggunakan strptime
fungsi, seperti datetime.strptime('2017-5-3','%Y-%m-%d')
di mana Anda harus menentukan format. Detail kode format yang berbeda dapat ditemukan di dokumentasi resmi .
Atau, cara yang lebih mudah adalah dengan menggunakan modul dateparse . Contohnya adalah dateparser.parse('16 Jun 2010')
, dateparser.parse('12/2/12')
ataudateparser.parse('2017-5-3')
Dua pendekatan di atas akan mengembalikan datetime
objek.
Langkah ke-2
Gunakan datetime
objek yang diperoleh untuk menelepon strptime(format)
. Sebagai contoh,
`` `python
dt = datetime.strptime('2017-01-1','%Y-%m-%d') # return a datetime object. This day is Sunday
print(dt.strftime("%W")) # '00' Monday as the 1st day of the week. All days in a new year preceding the 1st Monday are considered to be in week 0.
print(dt.strftime("%U")) # '01' Sunday as the 1st day of the week. All days in a new year preceding the 1st Sunday are considered to be in week 0.
print(dt.strftime("%V")) # '52' Monday as the 1st day of the week. Week 01 is the week containing Jan 4.
`` `
Sangat sulit untuk memutuskan format mana yang akan digunakan. Cara yang lebih baik adalah mendapatkan date
objek untuk dipanggil isocalendar()
. Sebagai contoh,
`` `python
dt = datetime.strptime('2017-01-1','%Y-%m-%d') # return a datetime object
d = dt.date() # convert to a date object. equivalent to d = date(2017,1,1), but date.strptime() don't have the parse function
year, week, weekday = d.isocalendar()
print(year, week, weekday) # (2016,52,7) in the ISO standard
`` `
Pada kenyataannya, Anda akan lebih cenderung menggunakan date.isocalendar()
untuk menyiapkan laporan mingguan, terutama di musim belanja "Natal-Tahun Baru".