Pergeseran hari kerja dengan hari libur
Geser tanggal dari minus 366 hingga 366 hari kerja, lewati akhir pekan dan hingga 1000 hari libur.
from datetime import date, timedelta
def working_day_shift(start, days, holidays):
if type(start) is not date or type(days) is not int or not -366 <= days <= 366:
raise ValueError("days.input")
if type(holidays) is not set or len(holidays) > 1000 or any(type(d) is not date for d in holidays):
raise ValueError("days.holidays")
remaining, step = abs(days), 1 if days >= 0 else -1
for _ in range(7*(remaining+len(holidays))+7):
if remaining == 0:
return start
try:
start += timedelta(days=step)
except OverflowError as error:
raise ValueError("days.range") from error
if start.weekday() < 5 and start not in holidays:
remaining -= 1
raise RuntimeError("days.steps")- Proyek
- Uji nol, arah balik dan batas kalender, tolak tanggal tidak valid tanpa mengubah hari libur.
- Tinjau sebelum menerapkan
- Bandingkan perilaku sebenarnya dengan hasil yang diharapkan. Jika pemeriksaan gagal, cari penyebabnya sebelum membuat perubahan lain.
- Model
- Atur endpoint kompatibel OpenAI atau Anthropic dengan URL dasar dan kunci API jika diperlukan. Uji koneksi. Server model lokal harus berjalan; alat jarak jauh dapat mengirim data secara terpisah.
from datetime import date, timedelta
def working_day_shift(start, days, holidays):
if type(start) is not date or type(days) is not int or not -366 <= days <= 366:
raise ValueError("days.input")
if type(holidays) is not set or len(holidays) > 1000 or any(type(d) is not date for d in holidays):
raise ValueError("days.holidays")
remaining, step = abs(days), 1 if days >= 0 else -1
for _ in range(7*(remaining+len(holidays))+7):
if remaining == 0:
return start
try:
start += timedelta(days=step)
except OverflowError as error:
raise ValueError("days.range") from error
if start.weekday() < 5 and start not in holidays:
remaining -= 1
raise RuntimeError("days.steps")Perjelas aturan penjadwalan sebelum menyunting kode tanggal
Kode penjadwalan sering mencampur kebijakan bisnis dengan aritmetika kalender biasa. DayThistle adalah ruang kerja pemrograman AI Windows tempat Anda dapat memisahkan pertanyaan itu saat meninjau proyek. Mulailah dari tanggal yang dihasilkan aplikasi, tanggal harapan, dan aturan di balik harapan itu. Minta model terhubung memeriksa kode relevan sebelum menyarankan koreksi.
Misalnya, Anda dapat meminta peninjauan fungsi bantu tenggat yang melewati akhir pekan dan himpunan hari libur yang disediakan. Jelaskan apakah hari awal dihitung, perilaku pergeseran negatif, dan pihak penyedia data libur. Mintalah usulan yang mempertahankan keputusan ini dalam pemanggil maupun fungsi bantu, bukan mengasumsikan satu definisi universal hari kerja.
Verifikasi usulan perubahan menggunakan kasus uji dari aturan tersebut. Sertakan lintasan akhir pekan, hari libur bersebelahan dengan akhir pekan, pergeseran nol, dan pergerakan mundur. Jalankan pengujian proyek dan periksa perilaku batas untuk tanggal yang tidak didukung. Tenggat yang tampak benar dalam satu contoh tidak membuktikan semua pemanggil memakai kebijakan sama.
DayThistle terhubung ke endpoint yang kompatibel dengan OpenAI atau endpoint Anthropic yang didukung. Anda dapat memilih model AI tanpa sensor yang ditawarkan layanan; alat dan konteks tersedia tetap bergantung pada server. Tuliskan kebijakan dalam tugas agar model membantu implementasi tanpa diam-diam menentukan cara organisasi menjadwalkan pekerjaan.
Pertanyaan di balik perubahan hari kerja
Apakah DayThistle menyediakan kalender hari libur?
Contoh tugas memakai data hari libur dari aplikasi Anda. Identifikasi sumber dan cakupan harapannya dalam permintaan. Jangan menganggap membuka ruang kerja menyediakan hari libur regional terkini atau menentukan peringatan yang memengaruhi tenggat.
Haruskah hari awal dihitung dalam pergeseran?
Nyatakan aturan itu secara eksplisit dan sertakan kasus uji dengan hari awal jatuh pada hari kerja. Kebijakan berbeda menghasilkan jawaban berbeda. Minta asisten mempertahankan konvensi pilihan dalam pergerakan maju maupun mundur.
Bagaimana membedakan data libur buruk dari cacat kode?
Simpan himpunan hari libur persis bersama kasus uji gagal dan periksa isinya sebelum mengubah perhitungan. Bandingkan hasil dengan kebijakan tertulis. Entri libur yang hilang dan kondisi pelewatan yang salah memerlukan koreksi berbeda.
Bagaimana jika perulangan usulan tidak memiliki kondisi penghentian jelas?
Tanyakan cara implementasi membatasi pergeseran yang didukung dan menangani kalender di luar rentang. Tinjau perilaku itu sebelum menerima. Jalankan pengujian batas bersama tanggal biasa agar perbaikan satu tenggat tidak memperkenalkan perhitungan tanpa batas.
DayThistle · Diperbarui 2026-10-25