Bagaimana cara membandingkan waktu dengan Python?


105

Saya melihat bahwa perbandingan tanggal dapat dilakukan dan ada juga datetime.timedelta(), tetapi saya berjuang untuk mengetahui bagaimana cara memeriksa apakah waktu saat ini ( datetime.datetime.now()) lebih awal, lebih lambat atau sama dari waktu yang ditentukan (misalnya 8 pagi) terlepas dari tanggalnya.


1
Saya tidak yakin tentang menempatkan ini sebagai jawaban, tetapi saya menaruhnya di sini sebagai komentar: yang mengejutkan, saya menemukan bahwa Python menerima perbandingan seperti '23:23:00' > '23:59:00'atau '23:23:00' > '23:09:22', seperti yang akan Anda lakukan antara dua datetime.datetime.now().strftime('%H:%M')nilai. Apakah ini cara terbaik untuk mencapai perbandingan antar waktu? Saya tidak tahu. Apakah itu bekerja? Sejauh yang saya uji, itu berfungsi dengan baik. Tapi yang pasti (dan tentu saja): bukan kesempatan untuk menggunakan ini dengan string datetime yang memiliki bulan, hari kerja.
ivanleoncz

Jawaban:


138

Anda tidak dapat membandingkan waktu tertentu (seperti "sekarang") dengan acara berulang yang tidak tetap (jam 8 pagi terjadi setiap hari).

Anda dapat memeriksa apakah sekarang sebelum atau sesudah jam 8 pagi hari ini :

>>> import datetime
>>> now = datetime.datetime.now()
>>> today8am = now.replace(hour=8, minute=0, second=0, microsecond=0)
>>> now < today8am
True
>>> now == today8am
False
>>> now > today8am
False

4
Anda mungkin ingin mengubah penerimaan menjadi jawaban Pär Wieslander (dan umumnya harus menunggu beberapa menit lebih lama daripada yang Anda lakukan: P), karena ini sedikit lebih spesifik untuk persis apa yang Anda tanyakan.

69

Anda dapat menggunakan time()metode datetimeobjek untuk mendapatkan waktu, yang dapat Anda gunakan untuk perbandingan tanpa memperhitungkan tanggal:

>>> this_morning = datetime.datetime(2009, 12, 2, 9, 30)
>>> last_night = datetime.datetime(2009, 12, 1, 20, 0)
>>> this_morning.time() < last_night.time()
True

2
Pastikan untuk melakukannya datetime.datetime.now().time(), jangan lupa tanda kurung di dalamnya now()!
Jose Salvatierra

10

Anda dapat membandingkan objek datetime.datetime secara langsung

Misalnya:

>>> a
datetime.datetime(2009, 12, 2, 10, 24, 34, 198130)
>>> b
datetime.datetime(2009, 12, 2, 10, 24, 36, 910128)
>>> a < b
True
>>> a > b
False
>>> a == a
True
>>> b == b
True
>>> 

5

Terinspirasi oleh Roger Pate:

import datetime
def todayAt (hr, min=0, sec=0, micros=0):
   now = datetime.datetime.now()
   return now.replace(hour=hr, minute=min, second=sec, microsecond=micros)    

# Usage demo1:
print todayAt (17), todayAt (17, 15)

# Usage demo2:    
timeNow = datetime.datetime.now()
if timeNow < todayAt (13):
   print "Too Early"

2

Cara lain untuk melakukan ini tanpa menambahkan dependensi atau menggunakan datetime adalah dengan melakukan beberapa penghitungan matematika pada atribut objek waktu. Ini memiliki jam, menit, detik, milidetik, dan zona waktu. Untuk perbandingan yang sangat sederhana, jam dan menit sudah cukup.

d = datetime.utcnow()
t = d.time()
print t.hour,t.minute,t.second

Saya tidak menyarankan melakukan ini kecuali Anda memiliki kasus penggunaan yang sangat sederhana. Untuk apa pun yang membutuhkan kesadaran zona waktu atau kesadaran tanggal, Anda harus menggunakan datetime.



2

Anda Dapat Menggunakan Fungsi Timedelta untuk perbandingan peningkatan waktu x.

>>> import datetime 

>>> now = datetime.datetime.now()
>>> after_10_min = now + datetime.timedelta(minutes = 10)
>>> now > after_10_min 

False

Hanya Kombinasi dari jawaban ini Dan Roger


1

datetime memiliki kemampuan perbandingan

>>> import datetime
>>> import time
>>> a =  datetime.datetime.now()
>>> time.sleep(2.0)
>>> b =  datetime.datetime.now()
>>> print a < b
True
>>> print a == b
False
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.