Python当前时间与其他时间的比较

Python当前时间与其他时间的比较,python,datetime,Python,Datetime,我正在寻找Python中两次的比较。一个时间是来自计算机的实时时间,另一个时间存储在格式为“01:23:00”的字符串中 datetime模块将日期、时间或组合日期时间值解析为可比较的对象 import datetime now = datetime.datetime.now() my_time_string = "01:20:33" my_datetime = datetime.datetime.strptime(my_time_string, "%H:%M:%S") # I am s

我正在寻找Python中两次的比较。一个时间是来自计算机的实时时间,另一个时间存储在格式为
“01:23:00”
的字符串中

datetime
模块将日期、时间或组合日期时间值解析为可比较的对象

import datetime

now = datetime.datetime.now()

my_time_string = "01:20:33"
my_datetime = datetime.datetime.strptime(my_time_string, "%H:%M:%S")

# I am supposing that the date must be the same as now
my_datetime = now.replace(hour=my_datetime.time().hour, minute=my_datetime.time().minute, second=my_datetime.time().second, microsecond=0)

if (now > my_datetime):
    print("Hello")
编辑:

上述解决方案未考虑闰秒天数(
23:59:60
)。以下是处理此类案件的更新版本:

import datetime
import calendar
import time

now = datetime.datetime.now()

my_time_string = "23:59:60" # leap second
my_time_string = now.strftime("%Y-%m-%d") + " " + my_time_string # I am supposing the date must be the same as now

my_time = time.strptime(my_time_string, "%Y-%m-%d %H:%M:%S")

my_datetime = datetime.datetime(1970, 1, 1) + datetime.timedelta(seconds=calendar.timegm(my_time))

if (now > my_datetime):
    print("Foo")

请修改你的问题的格式,另外,让它看起来像一个问题(目前没有一个问号)。解释你的代码和其中不起作用的东西。为什么你要尝试比较datetime字符串,这通常会给你错误的答案,因为它们会按字典顺序进行比较。为什么不将它们保留或转换为datetime对象,这样您就可以直接比较它们了。字符串是按字典顺序进行比较的。我认为你应该比较datetime对象。@felipeptcho一般来说,这是一件更好的事情。它更能保证正确,而且可能更快。在这种特殊情况下,按照上述方法进行操作可能是“安全的”。@梵蒂娜我可以看出,您的解决方案没有那么冗长,尽管效率可能很低。那太好了!但我很好奇为什么它“可能更安全”。@felipeptcho不是“可能更安全”,“可能安全”。如果使用24小时时间戳(格式为%H),则在“00:00:00”和“23:59:60”之间没有时间比较和字符串比较不一致。为什么不在比较之前将时间格式化为字符串会更快?减少字符串转换。@Vatine感谢您的解释。使用时间比较
23:59:60
将无法通过日期时间验证,并且会引发异常,我认为这是一种很好的方法,因为可以处理异常并向用户显示消息。另一方面,使用字符串比较不会验证任何内容,并且会“错误地”显示
00:00:00
之前的时间
23:59:60
import datetime
import calendar
import time

now = datetime.datetime.now()

my_time_string = "23:59:60" # leap second
my_time_string = now.strftime("%Y-%m-%d") + " " + my_time_string # I am supposing the date must be the same as now

my_time = time.strptime(my_time_string, "%Y-%m-%d %H:%M:%S")

my_datetime = datetime.datetime(1970, 1, 1) + datetime.timedelta(seconds=calendar.timegm(my_time))

if (now > my_datetime):
    print("Foo")
from datetime import datetime
current_time = datetime.strftime(datetime.utcnow(),"%H:%M:%S") #output: 11:12:12
mytime = "10:12:34"
if current_time >  mytime:
    print "Time has passed."