Saya mencoba mendapatkan tanggal bulan sebelumnya dengan python. Inilah yang saya coba:
str( time.strftime('%Y') ) + str( int(time.strftime('%m'))-1 )
Namun, cara ini buruk karena 2 alasan: Pertama mengembalikan 20122 untuk Februari 2012 (bukan 201202) dan kedua akan mengembalikan 0 bukannya 12 pada Januari.
Saya telah memecahkan masalah ini di bash with
echo $(date -d"3 month ago" "+%G%m%d")
Saya pikir jika bash memiliki cara bawaan untuk tujuan ini, maka python, yang jauh lebih lengkap, harus menyediakan sesuatu yang lebih baik daripada memaksa menulis skrip sendiri untuk mencapai tujuan ini. Tentu saja saya bisa melakukan sesuatu seperti:
if int(time.strftime('%m')) == 1:
return '12'
else:
if int(time.strftime('%m')) < 10:
return '0'+str(time.strftime('%m')-1)
else:
return str(time.strftime('%m') -1)
Saya belum menguji kode ini dan toh saya tidak ingin menggunakannya (kecuali saya tidak dapat menemukan cara lain: /)
Terima kasih atas bantuan Anda!
Jawaban:
kelas datetime dan datetime.timedelta adalah teman Anda.
Seperti ini:
201202
dicetak.sumber
.replace()
metode:datetime.utcnow().replace(day=1) - timedelta(days=1)
.replace()
fungsi. Lakukan sekali untuk mendapatkan bulan lalu, lalu lakukan lagi untuk mendapatkan hari yang Anda inginkan. Pertama:d = date.today()
laluone_month_ago = (d.replace(day=1) - timedelta(days=1)).replace(day=d.day)
calendar
dan menggunakancalendar.mdays[d.month-1]
dan lebih banyak kejelekan dalammin()
fungsi di ke-2replace
, tetapi tampaknya tidak Pythonic dan tidak memperhitungkan kasus sudut. Saya telah memperbarui jawaban saya di bawah ini menggunakantry - except
akun mana untuk semua kasus, meskipun saya benci menggunakan pengecualian sebagai bagian dari suatu algoritma.Anda harus menggunakan dateutil . Dengan itu, Anda dapat menggunakan relativedelta, ini merupakan versi yang ditingkatkan dari timedelta.
sumber
Atau:
sumber
Membangun jawaban bgporter .
sumber
Sangat mudah dan sederhana. Melakukan hal ini
Berikut ini hasilnya: $ python2.7 main.py
sumber
Untuk seseorang yang datang ke sini dan ingin mendapatkan hari pertama dan terakhir di bulan sebelumnya:
Keluaran:
sumber
Calendar
modul: stackabuse.com/introduction-to-the-python-calendar-modulesumber
Hanya untuk bersenang-senang, jawaban matematika murni menggunakan divmod. Cukup tidak efisien karena penggandaan, bisa juga melakukan pemeriksaan sederhana pada jumlah bulan (jika sama dengan 12, tambah tahun, dll)
sumber
Dengan pustaka Pendulum yang sangat lengkap, kami memiliki
subtract
metode (dan bukan "subStract"):Kami melihat bahwa itu menangani tahun melompat.
Setara kebalikannya adalah
add
.https://pendulum.eustace.io/docs/#addition-and-subtraction
sumber
Membangun komentar dari @JF Sebastian, Anda dapat rantai
replace()
fungsi untuk kembali satu "bulan". Karena sebulan bukan periode waktu yang konstan, solusi ini mencoba untuk kembali ke tanggal yang sama dengan bulan sebelumnya, yang tentu saja tidak berfungsi untuk semua bulan. Dalam kasus seperti itu, algoritma ini default ke hari terakhir bulan sebelumnya.Keluaran:
sumber
Jika Anda ingin melihat huruf ASCII dalam file tipe EXE di Lingkungan LINUX / UNIX, coba "od -c 'filename' | more"
Anda mungkin akan mendapatkan banyak item yang tidak dapat dikenali, tetapi semuanya akan disajikan, dan representasi HEX akan ditampilkan, dan karakter yang setara ASCII (jika sesuai) akan mengikuti garis kode hex. Cobalah di bagian kode yang dikompilasi yang Anda tahu. Anda mungkin melihat hal-hal di dalamnya yang Anda kenali.
sumber
Ada pustaka tingkat tinggi
dateparser
yang dapat menentukan tanggal terakhir yang diberikan bahasa alami, dan mengembalikandatetime
objek Python yang sesuaisumber