Bagaimana cara mengetahui nomor minggu tahun ini pada 16 Juni (wk24) dengan Python?
python
datetime
week-number
Gerry
sumber
sumber
strftime("%U", d)
mungkin berbeda dariisocalendar()
. Misalnya, jika Anda mengubah tahun ke 2004 Anda akan mendapatkan 24 minggu menggunakanstrftime()
dan 25 minggu menggunakanisocalendar()
.Jawaban:
datetime.date
memilikiisocalendar()
metode, yang mengembalikan tuple yang berisi minggu kalender:datetime.date.isocalendar () adalah metode instance yang mengembalikan tuple yang berisi tahun, jumlah hari kerja dan hari kerja dalam urutan masing-masing untuk instance tanggal yang diberikan.
sumber
[1]
', atau memberi petunjuk ke mana harus mencari informasi.date(2010, 1, 1).isocalendar()[1]
kembali53
. Dari dokumen: "Misalnya, 2004 dimulai pada hari Kamis, jadi minggu pertama ISO tahun 2004 dimulai pada hari Senin, 29 Desember 2003 dan berakhir pada hari Minggu, 4 Januari 2004, jadi itudate(2003, 12, 29).isocalendar() == (2004, 1, 1)
dandate(2004, 1, 4).isocalendar() == (2004, 1, 7)
."isocalendar()
memang hebat, tapi pastikan itu yang Anda inginkan. Hari ini adalah contoh sempurna. 01/01/2016 sama dengan(2015, 53, 5)
.now.strftime("%W")
dannow.strftime("%U")
sama dengan00
apa yang sering diinginkan. Contoh STRFTIMEAnda bisa mendapatkan nomor minggu langsung dari datetime sebagai string.
Anda juga bisa mendapatkan "tipe" berbeda dari jumlah minggu dalam setahun mengubah
strftime
parameter untuk:Saya sudah mengetahuinya dari sini . Ini bekerja untuk saya di Python 2.7.6
sumber
Invalid format string
pola ini. Dokumen mereka juga tidak menyebutkan%V
.%G-%V
sebagai ganti%Y-%V
.%G
adalah tahun ISO yang setara dengan%Y
Saya percaya
date.isocalendar()
akan menjadi jawabannya. Artikel ini menjelaskan matematika di balik Kalender ISO 8601. Periksa bagian date.isocalendar () dari halaman datetime dokumentasi Python..isocalendar () mengembalikan 3-tuple dengan (tahun, minggu num, hari minggu).
dt.isocalendar()[0]
mengembalikan tahun,dt.isocalendar()[1]
mengembalikan jumlah minggu,dt.isocalendar()[2]
mengembalikan hari minggu. Sesederhana mungkin.sumber
Ini pilihan lain:
yang mencetak
24
.Lihat: http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior
sumber
Minggu ISO yang disarankan oleh orang lain adalah yang baik, tetapi mungkin tidak sesuai dengan kebutuhan Anda. Diasumsikan setiap minggu dimulai dengan hari Senin, yang mengarah ke beberapa anomali menarik di awal dan akhir tahun.
Jika Anda lebih suka menggunakan definisi yang mengatakan minggu 1 selalu 1 Januari hingga 7 Januari, terlepas dari hari dalam seminggu, gunakan derivasi seperti ini:
sumber
Umumnya untuk mendapatkan nomor minggu ini (mulai dari hari Minggu):
sumber
Untuk nilai integer dari minggu instan dalam setahun coba:
sumber
Ada banyak sistem untuk penomoran minggu . Berikut ini adalah sistem yang paling umum dengan contoh kode:
ISO : Minggu pertama dimulai dengan hari Senin dan harus mengandung tanggal 4 Januari. Kalender ISO sudah diterapkan dalam Python:
Amerika Utara : Minggu pertama dimulai dengan hari Minggu dan harus berisi tanggal 1 Januari. Kode berikut adalah versi modifikasi saya dari implementasi kalender ISO Python untuk sistem Amerika Utara:
sumber
Jika Anda hanya menggunakan nomor minggu isocalendar di seluruh papan, yang berikut ini sudah cukup:
Ini mengambil anggota kedua dari tuple yang dikembalikan oleh isocalendar untuk nomor minggu kami.
Namun, jika Anda akan menggunakan fungsi tanggal yang berhubungan dengan kalender Gregorian, isocalendar saja tidak akan berfungsi! Ambil contoh berikut:
String di sini mengatakan untuk mengembalikan Senin dari minggu pertama tahun 2014 sebagai tanggal kami. Ketika kami menggunakan isocalendar untuk mengambil nomor minggu di sini, kami akan mengharapkan untuk mendapatkan nomor minggu yang sama kembali, tetapi kami tidak. Alih-alih kita mendapatkan angka 2 minggu. Mengapa?
Minggu 1 di kalender Gregorian adalah minggu pertama yang berisi hari Senin. Minggu 1 di isocalendar adalah minggu pertama yang berisi hari Kamis. Minggu parsial pada awal 2014 berisi Kamis, jadi ini adalah minggu 1 oleh kalender isocal, dan membuat
date
minggu ke-2.Jika kita ingin mendapatkan minggu Gregorian, kita perlu mengkonversi dari isocalendar ke Gregorian. Berikut adalah fungsi sederhana yang berfungsi.
sumber
Anda dapat mencoba arahan% W seperti di bawah ini:
'% W': Jumlah minggu dalam setahun (Senin sebagai hari pertama dalam seminggu) sebagai angka desimal. Semua hari dalam tahun baru sebelum Senin pertama dianggap dalam minggu ke-0 (00, 01, ..., 53)
sumber
isocalendar () mengembalikan nilai tahun dan minggu kerja yang salah untuk beberapa tanggal:
Bandingkan dengan pendekatan Mark Ransom:
sumber
Saya meringkas diskusi menjadi dua langkah:
datetime
objek.datetime
objek ataudate
objek untuk menghitung angka minggu.Pemanasan
`` `python
`` `
Langkah 1
Untuk menghasilkan
datetime
objek secara manual , kita dapat menggunakandatetime.datetime(2017,5,3)
ataudatetime.datetime.now()
.Namun dalam kenyataannya, kita biasanya perlu mengurai string yang ada. kita dapat menggunakan
strptime
fungsi, sepertidatetime.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 meneleponstrptime(format)
. Sebagai contoh,`` `python
`` `
Sangat sulit untuk memutuskan format mana yang akan digunakan. Cara yang lebih baik adalah mendapatkan
date
objek untuk dipanggilisocalendar()
. Sebagai contoh,`` `python
`` `
Pada kenyataannya, Anda akan lebih cenderung menggunakan
date.isocalendar()
untuk menyiapkan laporan mingguan, terutama di musim belanja "Natal-Tahun Baru".sumber
sumber
Banyak jawaban telah diberikan, tetapi saya ingin menambahkannya.
Jika Anda memerlukan minggu untuk ditampilkan sebagai gaya tahun / minggu (mis. 1953 - minggu 53 tahun 2019, 2001 - minggu 1 tahun 2020 dll.), Anda dapat melakukan ini:
Dibutuhkan tahun dan minggu saat ini, dan long_week_num pada hari penulisan ini adalah:
sumber
date()
dari awal?datetime.datetime()
contoh punya.date()
metode untuk pekerjaan itu.