Saya menambahkan string waktu UTC ke respons API Bitbucket yang saat ini hanya berisi string waktu Amsterdam (!). Untuk konsistensi dengan string waktu UTC yang dikembalikan ke tempat lain, format yang diinginkan adalah 2011-11-03 11:07:04
(diikuti oleh +00:00
, tetapi itu tidak benar).
Apa cara terbaik untuk membuat string seperti itu ( tanpa komponen mikrodetik) dari datetime
instance dengan komponen mikrodetik?
>>> import datetime
>>> print unicode(datetime.datetime.now())
2011-11-03 11:13:39.278026
Saya akan menambahkan opsi terbaik yang terpikir oleh saya sebagai jawaban yang mungkin, tetapi mungkin ada solusi yang lebih elegan.
Sunting: Saya harus menyebutkan bahwa saya sebenarnya tidak mencetak waktu saat ini - saya dulu datetime.now
memberikan contoh cepat. Jadi solusinya tidak boleh berasumsi bahwa setiap datetime
contoh yang diterimanya akan mencakup komponen mikrodetik.
sumber
.isoformat()
, yang mencakup mikrodetik secara default. Jika itu yang Anda butuhkan, jelaskan tentang hal itu. Semua orang akan segera mengerti apa yang kode ini lakukan. Hampir tidak ada orang yang mengerti kode lain tanpa melihat dokumentasi.sumber
.isoformat([sep])
- Mengembalikan string yang mewakili tanggal dan waktu dalam format ISO 8601, YYYY-MM-DDTHH: MM: SS.mmmmmm atau, jika mikrodetik adalah 0, YYYY-MM-DDTHH: MM: SS "Dengan Python 3.6:
https://docs.python.org/3.6/library/datetime.html#datetime.datetime.isoformat
sumber
Inilah cara saya melakukannya. Format ISO:
Anda dapat mengganti 'T' jika Anda tidak menginginkan format ISO:
sumber
.isoformat()
lebihunicode()
?unicode()
, dan jika Anda menginginkan ISO-8601, gunakanisoformat()
unicode()
lebih nyaman daripada.isoformat().replace('T', ' ')
, tentu saja. ;)isoformat
menerima specifier pemisah, jadi tidak ada penggantian yang harus dilakukan. lakukan saja:datetime.datetime.now().replace(microsecond=0).isoformat(' ')
Pilihan lain:
Secara default ini menggunakan waktu lokal, jika Anda memerlukan UTC Anda dapat menggunakan yang berikut:
sumber
Simpan 19 karakter pertama yang Anda inginkan melalui slicing:
sumber
+05:30
. Benarstr(now())[:19]
.10000
, yang kedua akan dilewatkanSaya biasanya melakukan:
keluaran:
sumber
Karena tidak semua
datetime.datetime
instance memiliki komponen mikrodetik (yaitu ketika nol), Anda dapat mempartisi string pada "." dan hanya mengambil item pertama, yang akan selalu berfungsi:sumber
Kita dapat mencoba sesuatu seperti di bawah ini
sumber
.isoformat(' ', 'seconds')
, yang diusulkan dalam jawaban sebelumnya.Saya menemukan ini sebagai cara paling sederhana.
sumber
Ini saya gunakan karena saya bisa mengerti dan karenanya mengingatnya lebih baik (dan format waktu tanggal juga dapat disesuaikan berdasarkan pilihan Anda): -
sumber