日期时间替换返回 None/NaN 值

时间:2021-04-11 03:39:32

标签: python python-datetime

我无法理解如何在底部的代码中使用有关当前日期时间的信息。 我将当前日期时间计算为

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 的代码 (From string to datetime, looking at the current (local) time) 是

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))

我需要解释一下我的替代品出了什么问题。

2 个答案:

答案 0 :(得分:1)

要获取当前日期(我假设这是您要执行的操作),您可以使用:

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.

答案 1 :(得分:0)

改变

import datetime

from datetime import datetime

将使您的第一个代码片段工作

from datetime import datetime

now = datetime.now()
reftime1 =  datetime(now.year,now.month,now.day,now.hour)