Python 将datetime.now()对象的时间与时间字符串进行比较
使用卢布的建议和基于该建议的毛里克·甘加尼的例子: 我有两个时间字符串,它们已使用.strtime转换为datetime对象,如下所示:Python 将datetime.now()对象的时间与时间字符串进行比较,python,datetime,Python,Datetime,使用卢布的建议和基于该建议的毛里克·甘加尼的例子: 我有两个时间字符串,它们已使用.strtime转换为datetime对象,如下所示: timeStart = '0300' timeStart = datetime.strptime(timeStart, '%H%M') 我现在有一个datetime对象: timeNow=datetime.now() 我的问题是,除非我将timeNow(datetime对象)转换为字符串,然后再次使用.strTime返回,否则脚本将无法工作: timeNo
timeStart = '0300'
timeStart = datetime.strptime(timeStart, '%H%M')
我现在有一个datetime对象:
timeNow=datetime.now()
我的问题是,除非我将timeNow(datetime对象)转换为字符串,然后再次使用.strTime返回,否则脚本将无法工作:
timeNow = datetime.now()
timeNow = datetime.strftime(timeNow, '%H%M')
timeNow = datetime.strptime(timeNow, '%H%M')
完整代码:
from datetime import datetime
def isNowInTimePeriod(startTime, endTime, nowTime):
if startTime < endTime:
return nowTime >= startTime and nowTime <= endTime
else: #Over midnight
return nowTime >= startTime or nowTime <= endTime
timeStart = '0300'
timeEnd = '1000'
timeEnd = datetime.strptime(timeEnd, '%H%M')
timeStart = datetime.strptime(timeStart, '%H%M')
timeNow = datetime.now()
timeNow = datetime.strftime(timeNow, '%H%M')
timeNow = datetime.strptime(timeNow, '%H%M')
从日期时间导入日期时间
def isNowInTimePeriod(开始时间、结束时间、现在时间):
如果开始时间<结束时间:
return nowTime>=startTime和nowTime=startTime或nowTime如果调用datetime.strtime
,如果只提供时间字符串,则会添加默认日期datetime.now()
将有今天的日期。您可以只使用datetime对象的时间部分来删除它,这是通过调用time()
方法获得的,例如
from datetime import datetime
def isNowInTimePeriod(startTime, endTime, nowTime):
if startTime < endTime:
return nowTime >= startTime and nowTime <= endTime
else: #Over midnight
return nowTime >= startTime or nowTime <= endTime
timeStart = '0300'
timeEnd = '1000'
timeEnd = datetime.strptime(timeEnd, '%H%M').time()
timeStart = datetime.strptime(timeStart, '%H%M').time()
timeNow = datetime.now().time()
print(isNowInTimePeriod(timeStart, timeEnd, timeNow))
# True (my current time is 0823)
从日期时间导入日期时间
def isNowInTimePeriod(开始时间、结束时间、现在时间):
如果开始时间<结束时间:
return nowTime>=startTime和nowTime=startTime或nowTime如果调用datetime.strtime
,如果只提供时间字符串,则会添加默认日期datetime.now()
将有今天的日期。您可以只使用datetime对象的时间部分来删除它,这是通过调用time()
方法获得的,例如
from datetime import datetime
def isNowInTimePeriod(startTime, endTime, nowTime):
if startTime < endTime:
return nowTime >= startTime and nowTime <= endTime
else: #Over midnight
return nowTime >= startTime or nowTime <= endTime
timeStart = '0300'
timeEnd = '1000'
timeEnd = datetime.strptime(timeEnd, '%H%M').time()
timeStart = datetime.strptime(timeStart, '%H%M').time()
timeNow = datetime.now().time()
print(isNowInTimePeriod(timeStart, timeEnd, timeNow))
# True (my current time is 0823)
从日期时间导入日期时间
def isNowInTimePeriod(开始时间、结束时间、现在时间):
如果开始时间<结束时间:
return nowTime>=startTime和nowTime=startTime或nowTime您的代码不起作用的原因是,除了时间之外,datetime
(顾名思义)还包含有关日期的信息
运行以下代码时:
timeStart = '0300'
timeStart = datetime.strptime(timeStart, '%H%M')
将转换小时和分钟,但其余部分(“日期”部分)假定为历元:
repr(timeStart)
# Output: 'datetime.datetime(1900, 1, 1, 3, 0)'
但是,当运行datetime.now()
时,始终假定当前时间+日期:
>>> datetime.now()
datetime.datetime(2020, 7, 17, 8, 25, 18, 270848)
转换为字符串和从字符串返回的操作之所以有效,是因为当您将日期时间转换为格式为'%H%M
的字符串时,结果字符串中的日期部分将丢失。从那转换回来,只有小时和分钟可以阅读,所以你失去了日期部分
实际上,应该使用datetime.time
,而不是datetime.datetime
来比较时间
在使用strtime
读取后,尝试使用.time()
方法仅提取时间部分并丢失日期部分:
timeStart = '0300'
timeStart = datetime.strptime(timeStart, '%H%M').time()
对于timeNow
部分,也一样:
timeNow = datetime.now().time()
代码不起作用的原因是,除了时间之外,datetime
(顾名思义)还包含有关日期的信息
运行以下代码时:
timeStart = '0300'
timeStart = datetime.strptime(timeStart, '%H%M')
将转换小时和分钟,但其余部分(“日期”部分)假定为历元:
repr(timeStart)
# Output: 'datetime.datetime(1900, 1, 1, 3, 0)'
但是,当运行datetime.now()
时,始终假定当前时间+日期:
>>> datetime.now()
datetime.datetime(2020, 7, 17, 8, 25, 18, 270848)
转换为字符串和从字符串返回的操作之所以有效,是因为当您将日期时间转换为格式为'%H%M
的字符串时,结果字符串中的日期部分将丢失。从那转换回来,只有小时和分钟可以阅读,所以你失去了日期部分
实际上,应该使用datetime.time
,而不是datetime.datetime
来比较时间
在使用strtime
读取后,尝试使用.time()
方法仅提取时间部分并丢失日期部分:
timeStart = '0300'
timeStart = datetime.strptime(timeStart, '%H%M').time()
对于timeNow
部分,也一样:
timeNow = datetime.now().time()
我尝试的是将我的计算机的时间格式从上午/下午转换为24小时,然后执行:dt.datetime.now()
这给了我输出:datetime.datetime(2020,7,17,20,55,10262243)
。这里清楚地显示了日期:2020年7月17日,时间为20:55:10:262243,格式为HH:MM:SS。我尝试的是将计算机的时间格式从上午/下午转换为24小时,然后执行:dt.datetime.now()
这给了我输出:datetime.datetime(2020,7,17,20,55,10262243)
。这里清楚地显示了日期:2020年7月17日,时间为20:55:10:262243,格式为HH:MM:SS。