Datetime替换返回None/NaN值

2024-10-03 02:32:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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 

我要替换的代码(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))

我需要一个关于我的替代品有什么问题的解释


Tags: 代码importdatetimestringreturn时间nowtd
2条回答

要获取当前日期(我假设您正在尝试这样做),您可以使用:

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”etc格式,那么您可以使用以下内容:

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)

相关问题 更多 >