如何在Python中将时间“ now-5m”转换为日期时间对象

时间:2019-05-06 10:42:20

标签: python datetime

我有一种情况,可以用以下任何一种格式获取日期时间。

1)作为字符串,格式如下:1970-01-01T00:00:00

2)“现在-500万”

3)“现在-1小时”

或与分钟,第二天或什至一天的类似组合,我想要的时间比给定时间早x分钟,那么这样做的最佳方法是什么?是否存在可以处理所有这些格式并为我提供统一格式日期时间的库?

4 个答案:

答案 0 :(得分:2)

您正在查看python的var infowindow = new google.maps.InfoWindow({ content:"<p>Location-"+data.location_name+"</p>", maxWidth: 250 }); infowindow.open(map, marker); html2canvas($("#divid"), { useCORS: true, onrendered: function (canvas) { $('#img_val').val(canvas.toDataURL("image/png")) $("#show_img").append(canvas); } }); 模块。我们使用datetime.strptime将datetime字符串转换为datetime对象,然后使用datetime.timedelta进行诸如减去分钟和小时的操作

datetime

输出将为import datetime #Convert the string to datetime object dt = datetime.datetime.strptime('1970-01-01T00:00:00', '%Y-%m-%dT%H:%M:%S') #Subtract 5 minutes from the time print(dt - datetime.timedelta(minutes=5)) #Subtract 1 hour from the time print(dt - datetime.timedelta(hours=1))

此外,您还可以查看dateutil库,该库为您提供dateutil.relativedelta,在其中您还可以提供年,日和月。

1969-12-31 23:55:00

这里的输出将是

import datetime
from dateutil.relativedelta import relativedelta

#Convert the string to datetime object
dt = datetime.datetime.strptime('1970-01-01T00:00:00', '%Y-%m-%dT%H:%M:%S')

#Subtract 5 minutes from the time
print(dt - relativedelta(days=5))

#Subtract 1 hour from the time
print(dt - relativedelta(month=1))

现在,为了避免必须提供1969-12-27 00:00:00 1970-01-01 00:00:00 等作为参数,您可以将它们全部转换为标准格式(例如hours,minutes,daysseconds),然后使用它。

因此,例如,如果您想减去一个小时零5分钟,则可以减去65分钟

minutes

也许您可以编写一个函数来获取诸如#Subtract 65 minutes from the time print(dt - relativedelta(minutes=5)) #Subtract 1 hour and 5 minutes from the time print(dt - relativedelta(hours=1, minutes=5)) 5m1h之类的字符串作为输入,并给您以分钟作为回报

2d

然后您可以在def get_minutes(s): if 'm' in s: return int(s.replace('m','')) elif 'h' in s: return int(s.replace('h', ''))*60 elif 'd' in s: return int(s.replace('d', ''))*1440 print(get_minutes('5m')) #5 print(get_minutes('1h')) #60 print(get_minutes('2d')) #2880 timedelta函数中使用此函数,也许可以扩展此函数以包含更多类型的时间字符串 同样,您可以提出一个标准时间,将其转换为所有时间,然后在参数中使用它!

答案 1 :(得分:2)

经过更多研究,我发现有一个名为dateparser的模块,该模块提供了一种解析方法,使用解析方法,我们可以将任何格式转换为datetime.datetime对象,然后可以按照prosti的建议使用relativedelta方法进行减法。

示例代码

import dateparser
from dateutil.relativedelta import relativedelta

print(dateparser.parse("now"))
print(dateparser.parse("now-30s"))
print(dateparser.parse("now-5m"))
print(dateparser.parse("1970-01-01T00:00:00"))
print(dateparser.parse("1970/01/01T00:00:00"))
print(type(dateparser.parse("1970/01/01T00:00:00")))
dt = dateparser.parse("now-5m")
print(dt - relativedelta(minutes=10)) # equals to now -15 min

输出::

2019-05-06 12:55:54.074220

2019-05-06 12:55:24.076534

2019-05-06 12:50:54.077823

1970-01-01 00:00:00

1970-01-01 00:00:00

2019-05-06 12:40:54.087881

您可以在:: https://pypi.org/project/dateparser/

了解更多信息

答案 2 :(得分:1)

您可以像这样组合hours and minutes

untrace

它返回:

import datetime

#Convert the string to datetime object
dt = datetime.datetime.strptime('1970-01-01T00:00:00', '%Y-%m-%dT%H:%M:%S')

#Subtract one hour and 5 minutes together :)
print(dt - datetime.timedelta(hours=1, minutes=5))

答案 3 :(得分:1)

针对2),3)案例的想法,需要进行测试和完善:

import pandas as pd
import datetime as dt

def fuzzy_parse(t): return dt.datetime.utcnow() - pd.Timedelta(t.split("-")[1])

print(dt.datetime.utcnow(), fuzzy_parse("now-1s"))
print(dt.datetime.utcnow(), fuzzy_parse("now-1m"))
print(dt.datetime.utcnow(), fuzzy_parse("now-1h"))
print(dt.datetime.utcnow(), fuzzy_parse("now-1d"))
print(dt.datetime.utcnow(), fuzzy_parse("now-1w"))

输出:

2019-05-06 11:24:12.347120 2019-05-06 11:24:11.347125
2019-05-06 11:24:12.347388 2019-05-06 11:23:12.347391
2019-05-06 11:24:12.347554 2019-05-06 10:24:12.347557
2019-05-06 11:24:12.347710 2019-05-05 11:24:12.347712
2019-05-06 11:24:12.347863 2019-04-29 11:24:12.347865