我有一种情况,可以用以下任何一种格式获取日期时间。
1)作为字符串,格式如下:1970-01-01T00:00:00
2)“现在-500万”
3)“现在-1小时”
或与分钟,第二天或什至一天的类似组合,我想要的时间比给定时间早x分钟,那么这样做的最佳方法是什么?是否存在可以处理所有这些格式并为我提供统一格式日期时间的库?
答案 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,days
和seconds
),然后使用它。
因此,例如,如果您想减去一个小时零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))
,5m
,1h
之类的字符串作为输入,并给您以分钟作为回报
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
了解更多信息答案 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