Python 从字符串到日期时间,查看当前(本地)时间

Python 从字符串到日期时间,查看当前(本地)时间,python,pandas,datetime,Python,Pandas,Datetime,python中是否有函数从字符串中提取时间信息以从当前本地字符串中获取时间? 例如: 我有一个专栏,上面有过去和现在的时间信息,比如英国时间,大约20:00 Time 10 hours # ago 6 hours # ago 12 hours # ago 2 days # ago 1 day # ago 我想看看当前的英国时间,即大约20:00: New_Time 10:00 14:00 8:00 48:00 24:00 上面的列来自当前本地时间减去时间列中从字符串到数字的小时数 这

python中是否有函数从字符串中提取时间信息以从当前本地字符串中获取时间? 例如:

我有一个专栏,上面有过去和现在的时间信息,比如英国时间,大约20:00

Time

10 hours # ago
6 hours # ago
12 hours # ago
2 days # ago
1 day # ago
我想看看当前的英国时间,即大约20:00:

New_Time

10:00 
14:00 
8:00
48:00
24:00
上面的列来自当前本地时间减去时间列中从字符串到数字的小时数

这是我可以用函数做的事情吗?新的时间是我需要的输出

如果python中可能没有函数,我的方法是:

使用某种方法检测当前时间,并将其保存在变量中 考虑小时为60分钟和1天为24小时…为了运行一些数学运算,曾经将字符串转换为数字 从当前时间中减去返回时间的分钟数/小时数
您可以创建一个方法,该方法将返回几个小时/天/的时间。。。以前例如,两个方法将分别返回x天前的日期和x小时前的小时:

def getTimeDaysAgox: 今天=datetime.datetime.now value=today.day-x 上一个月=今天。月份-1 上一个月持续时间=30 如果上一个月==2: 如果今天.year%4==0: 上一个月持续时间=29 其他: 上一个月持续时间=28 如果上一个月%2==1: 上一个月持续时间=31 如果值>=0,则返回值其他值+上一个月持续时间 def getTimeHoursAgox: 值=datetime.datetime.now.hour-x 如果值>=0,则返回值,否则返回值+24 我不知道你为什么想在两天前得到48:00,在10小时前得到10:00。请随时询问更多信息,我很乐意为您提供帮助。

您可以在评论中使用该软件包进行一些解释:

import datetime
import dateparser # pip install dateparser

# a function to format timedelta to string needed below,
# see https://stackoverflow.com/q/538666/10197418
def timedelta2str(sec):
    hours, remainder = divmod(sec, 3600)
    return f'{int(hours):02}:{int(remainder//60):02}'

def formatTimeAgo(string, reftime):
    # try to parser... if successful, you get a datetime object
    dtobj = dateparser.parse(string, settings={'RELATIVE_BASE': reftime})
    if isinstance(dtobj, datetime.datetime):
        # calculate a timedelta object against reference time
        td = reftime - dtobj
        # now format output based on input (days or hours..)
        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")
# a reference time
reftime = datetime.datetime(2021,4,10,20)
for elem in t:
    print(elem, '->', formatTimeAgo(elem, reftime))
       
# giving you
>>> 10 hours -> 10:00
>>> 6 hours -> 14:00
>>> 2 days -> 48:00
>>> 1 day -> 24:00
现在,您可以将其调整为用于熊猫。系列:

import pandas as pd

df = pd.DataFrame({'Time': ["10 hours", "6 hours", "12 hours", "2 days", "1 day"]})

df['New_Time'] = df['Time'].apply(formatTimeAgo, args=(reftime,))

df['New_Time']
0    10:00
1    14:00
2    08:00
3    48:00
4    24:00
Name: New_Time, dtype: object

df['Time']=df['Time'].applylambda x:pd.timedeltaxanurag。但是,您建议的公式只是将字符串转换为datetime,因此输出与我的预期不符,即当前本地时间减去我问题中列中报告的小时数。对不起,我想我把我要找的解释得不好。试着编辑问题两件事为什么你会被否决,首先,展示一些努力,做一些研究,自己尝试一些东西,并将其添加到问题中总是一个好主意。第二,有些人可能会说这是离题的,因为要求一个模块或包,即准备使用的代码。但一般来说,人们都很懒惰,他们不会评论为什么他们会投反对票,尽管这可能对其他人有所帮助。无论如何,不要太担心落选。非常感谢你,福普斯先生。我同意你的看法。当然,你的评论可以帮助我改进接下来的问题。非常特别现在你还需要找到xWell,你真的不需要找到它。或者至少我不是那样理解的。例如,他似乎想得到x小时前的时间,所以你可以指定或询问4小时前的时间,这就是你的x。OP想要的输出令人困惑的是,它是时间前三个字段和持续时间后两个字段的混合体…@Nefty,非常感谢你的回答。我需要48小时,而不是2天,因为我需要绘制这些结果。但是,如果有可能绘制它们,即使从时间参考点看-2天,也没关系。欢迎!如果需要,请随时提问,我很乐意帮助您解决以下问题:您好,我试图用reftime=datetimeintnow.year,intnow.month,intnow.day,intnow.hour替换reftime,但似乎这一步printelem,“->”,formatTimeAgolem,reftime导致了一些问题。你知道最终的原因吗?@LdM:如果你改变参考时间,输出当然会改变。我不知道你所说的问题是什么意思。问题已经解决了。我刚刚在reftime中替换了datetime.datetime.now。谢谢你,福普斯先生