2024-04-27 13:51:12 发布
网友
我有以下格式的日期字符串:
x minutes/hours/days/months/years ago
我需要使用python将其解析为datetime。
看来dateutil做不到。
有办法吗?
这可以通过^{}s轻松完成:
import datetime def string_to_delta(string_delta): value, unit, _ = string_delta.split() return datetime.timedelta(**{unit: float(value)})
生产:
>>> string_to_delta("20 hours ago") datetime.timedelta(0, 72000)
虽然这将需要一些额外的工作来处理月/年-因为将月添加到日期是一个含糊不清的操作,但如果您知道它的含义,它应该是一个简单的添加。
要获得实际时间,只需从^{}中去掉delta。
你当然可以。你只需要一个^{}。
s = "3 days ago" parsed_s = [s.split()[:2]] time_dict = dict((fmt,float(amount)) for amount,fmt in parsed_s) dt = datetime.timedelta(**time_dict) past_time = datetime.datetime.now() - dt
另外,看起来^{}有一个relativedelta,它的作用类似于一个timedelta,但是构造函数也接受参数中的months和years(显然参数需要是整数)。
relativedelta
months
years
因为你的论点是2天前,3个月前,2年前。下面的函数可以帮助获取参数的确切日期。您首先需要导入以下日期实用程序
import datetime from dateutil.relativedelta import relativedelta
然后实现下面的功能
def get_past_date(str_days_ago): TODAY = datetime.date.today() splitted = str_days_ago.split() if len(splitted) == 1 and splitted[0].lower() == 'today': return str(TODAY.isoformat()) elif len(splitted) == 1 and splitted[0].lower() == 'yesterday': date = TODAY - relativedelta(days=1) return str(date.isoformat()) elif splitted[1].lower() in ['hour', 'hours', 'hr', 'hrs', 'h']: date = datetime.datetime.now() - relativedelta(hours=int(splitted[0])) return str(date.date().isoformat()) elif splitted[1].lower() in ['day', 'days', 'd']: date = TODAY - relativedelta(days=int(splitted[0])) return str(date.isoformat()) elif splitted[1].lower() in ['wk', 'wks', 'week', 'weeks', 'w']: date = TODAY - relativedelta(weeks=int(splitted[0])) return str(date.isoformat()) elif splitted[1].lower() in ['mon', 'mons', 'month', 'months', 'm']: date = TODAY - relativedelta(months=int(splitted[0])) return str(date.isoformat()) elif splitted[1].lower() in ['yrs', 'yr', 'years', 'year', 'y']: date = TODAY - relativedelta(years=int(splitted[0])) return str(date.isoformat()) else: return "Wrong Argument format"
然后可以这样调用函数:
print get_past_date('5 hours ago') print get_past_date('yesterday') print get_past_date('3 days ago') print get_past_date('4 months ago') print get_past_date('2 years ago') print get_past_date('today')
这可以通过^{} s轻松完成:
生产:
虽然这将需要一些额外的工作来处理月/年-因为将月添加到日期是一个含糊不清的操作,但如果您知道它的含义,它应该是一个简单的添加。
要获得实际时间,只需从^{} 中去掉delta。
你当然可以。你只需要一个^{} 。
另外,看起来^{} 有一个
relativedelta
,它的作用类似于一个timedelta,但是构造函数也接受参数中的months
和years
(显然参数需要是整数)。因为你的论点是2天前,3个月前,2年前。下面的函数可以帮助获取参数的确切日期。您首先需要导入以下日期实用程序
然后实现下面的功能
然后可以这样调用函数:
相关问题 更多 >
编程相关推荐