日期时间替换 returns None/NaN 值
Datetime replacement returns None/NaN values
我无法理解如何在底部的代码中使用有关当前日期时间的信息。
我将当前日期时间计算为
import datetime
now = datetime.now()
reftime1 = datetime(now.year,now.month,now.day,now.hour) # only NaN values
对比下面代码中的示例
reftime2 = datetime.datetime(2021,4,10,20) # no error
我想替换reftime1
的代码()是
import datetime
import dateparser
def timedelta2str(sec):
hours, remainder = divmod(sec, 3600)
return f'{int(hours):02}:{int(remainder//60):02}'
def formatTimeAgo(string, reftime):
dtobj = dateparser.parse(string, settings={'RELATIVE_BASE': reftime})
if isinstance(dtobj, datetime.datetime):
td = reftime - dtobj
if td >= datetime.timedelta(1):
return timedelta2str(td.total_seconds())
else:
return (reftime-td).strftime('%H:%M')
else:
return "N/A"
# exemplary input
t = ("10 hours", "6 hours", "2 days", "1 day")
reftime1 = datetime.datetime(2021,4,10,20) # here
for elem in t:
print(elem, '->', formatTimeAgo(elem, reftime1))
我需要解释一下我的替换有什么问题。
要获取当前日期(我假设这就是您想要做的),您可以使用:
reftime1=datetime.datetime.now()
已实施:
import datetime
import dateparser
def timedelta2str(sec):
hours, remainder = divmod(sec, 3600)
return f'{int(hours):02}:{int(remainder//60):02}'
def formatTimeAgo(string, reftime):
dtobj = dateparser.parse(string, settings={'RELATIVE_BASE': reftime})
if isinstance(dtobj, datetime.datetime):
td = reftime - dtobj
if td >= datetime.timedelta(1):
return timedelta2str(td.total_seconds())
else:
return (reftime-td).strftime('%H:%M')
else:
return "N/A"
# exemplary input
t = ("10 hours", "6 hours", "2 days", "1 day")
reftime1 = datetime.datetime.now() # MADE THE CHANGES HERE
for elem in t:
print(elem, '->', formatTimeAgo(elem, reftime1))
但是,如果您确实想使用您尝试使用的 'now.hour' 等格式,那么您可以使用类似的格式:
from datetime import datetime
now = datetime.now()
print(now.hour) # you can change the hour to minute or second; ETC.
改变
import datetime
到
from datetime import datetime
将使您的第一个代码片段工作
from datetime import datetime
now = datetime.now()
reftime1 = datetime(now.year,now.month,now.day,now.hour)
我无法理解如何在底部的代码中使用有关当前日期时间的信息。 我将当前日期时间计算为
import datetime
now = datetime.now()
reftime1 = datetime(now.year,now.month,now.day,now.hour) # only NaN values
对比下面代码中的示例
reftime2 = datetime.datetime(2021,4,10,20) # no error
我想替换reftime1
的代码(
import datetime
import dateparser
def timedelta2str(sec):
hours, remainder = divmod(sec, 3600)
return f'{int(hours):02}:{int(remainder//60):02}'
def formatTimeAgo(string, reftime):
dtobj = dateparser.parse(string, settings={'RELATIVE_BASE': reftime})
if isinstance(dtobj, datetime.datetime):
td = reftime - dtobj
if td >= datetime.timedelta(1):
return timedelta2str(td.total_seconds())
else:
return (reftime-td).strftime('%H:%M')
else:
return "N/A"
# exemplary input
t = ("10 hours", "6 hours", "2 days", "1 day")
reftime1 = datetime.datetime(2021,4,10,20) # here
for elem in t:
print(elem, '->', formatTimeAgo(elem, reftime1))
我需要解释一下我的替换有什么问题。
要获取当前日期(我假设这就是您想要做的),您可以使用:
reftime1=datetime.datetime.now()
已实施:
import datetime
import dateparser
def timedelta2str(sec):
hours, remainder = divmod(sec, 3600)
return f'{int(hours):02}:{int(remainder//60):02}'
def formatTimeAgo(string, reftime):
dtobj = dateparser.parse(string, settings={'RELATIVE_BASE': reftime})
if isinstance(dtobj, datetime.datetime):
td = reftime - dtobj
if td >= datetime.timedelta(1):
return timedelta2str(td.total_seconds())
else:
return (reftime-td).strftime('%H:%M')
else:
return "N/A"
# exemplary input
t = ("10 hours", "6 hours", "2 days", "1 day")
reftime1 = datetime.datetime.now() # MADE THE CHANGES HERE
for elem in t:
print(elem, '->', formatTimeAgo(elem, reftime1))
但是,如果您确实想使用您尝试使用的 'now.hour' 等格式,那么您可以使用类似的格式:
from datetime import datetime
now = datetime.now()
print(now.hour) # you can change the hour to minute or second; ETC.
改变
import datetime
到
from datetime import datetime
将使您的第一个代码片段工作
from datetime import datetime
now = datetime.now()
reftime1 = datetime(now.year,now.month,now.day,now.hour)