Saya punya timedelta. Saya ingin hari, jam dan menit dari itu - baik sebagai tuple atau kamus ... Saya tidak sibuk.
Saya pasti telah melakukan ini selusin kali dalam selusin bahasa selama bertahun-tahun, tetapi Python biasanya memiliki jawaban sederhana untuk semuanya, jadi saya pikir saya akan bertanya di sini sebelum mengeluarkan beberapa matematika sederhana (belum bertele-tele) yang memuakkan.
Tuan Fooz memunculkan poin yang bagus.
Saya sedang berurusan dengan "daftar" (sedikit seperti daftar ebay) di mana masing-masing memiliki durasi. Saya mencoba mencari waktu yang tersisa dengan melakukanwhen_added + duration - now
Apakah saya benar mengatakan bahwa tidak akan menjelaskan DST? Jika tidak, apa cara paling sederhana untuk menambah / mengurangi satu jam?
timedelta
objek "datetime.timedelta (seconds = 1177)" : cukup gunakan str ()Jawaban:
Jika Anda memiliki
datetime.timedelta
nilaitd
,td.days
sudah memberi Anda "hari" yang Anda inginkan.timedelta
nilai menjaga fraksi sehari sebagai detik (tidak langsung berjam-jam atau menit) sehingga Anda memang harus melakukan "matematika sederhana yang memuakkan", misalnya:sumber
td
negatif,-1 // 3600
adalah-1
.//
digunakan bukan/
untuk mendapatkan bilangan bulat, bukan float.//
adalah operator divisi lantai: "divisi yang menghasilkan bilangan bulat disesuaikan ke kiri di garis bilangan", lihat di sini .jcrs
ditunjukkan,-1//3600
adalah-1
, jadi mengapa tidak menggunakanint(td.seconds/3600)
sebagai gantinya mengubah-1
detik menjadi0
jam daripada1
jam mundur?days, hours, minutes = x.days, x.seconds // 3600, x.seconds %3600//60
dan kemudianseconds = x.seconds - hours*3600 - minutes*60
Ini sedikit lebih kompak, Anda mendapatkan jam, menit, dan detik dalam dua baris.
sumber
td.days
bukan nol. Kamu butuhhours += td.days*24
. Jika Anda ingin memperhitungkan fraksi akun per detik (OP tidak);seconds += td.microseconds / 1e6
bisa digunakan.Sedangkan untuk DST, saya pikir yang terbaik adalah mengubah kedua
datetime
objek menjadi detik. Dengan cara ini sistem menghitung DST untuk Anda.sumber
mktime()
mungkin gagal jika zona waktu lokal memiliki offset utc yang berbeda pada waktu yang berbeda (banyak yang melakukannya) - Anda dapat menggunakanpytz
modul untuk mendapatkan akses ke basis data tz dengan cara deteministik portabel. Juga, waktu setempat mungkin ambigu (kemungkinan 50% kesalahan) - Anda memerlukan beberapa info tambahan untuk mengaburkan misalnya, sering (tidak selalu) tanggal dalam file log bersifat monoton . Lihat Bagaimana saya bisa mengurangi satu hari dari tanggal python? yang mungkin harus berurusan dengan masalah serupa.Saya tidak mengerti
bagaimana dengan ini
Anda mendapatkan menit dan detik sebagai float.
sumber
Saya menggunakan yang berikut ini:
sumber
timedeltas memiliki
days
danseconds
atribut .. Anda dapat mengonversinya sendiri dengan mudah.sumber