Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将datetime.now()对象的时间与时间字符串进行比较_Python_Datetime - Fatal编程技术网

Python 将datetime.now()对象的时间与时间字符串进行比较

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

使用卢布的建议和基于该建议的毛里克·甘加尼的例子:

我有两个时间字符串,它们已使用.strtime转换为datetime对象,如下所示:

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。