“如何隐藏时间”;“现在是500万”;在python中创建datetime对象

“如何隐藏时间”;“现在是500万”;在python中创建datetime对象,python,datetime,Python,Datetime,我有一个场景,在这个场景中,我可以获得以下任何格式的日期时间 1) 以下格式的字符串:1970-01-01T00:00:00 2) “现在-500万” 3) “现在-1h” 或者与min,second,甚至day类似的组合,我想得到一个比给定时间长x min的时间,最好的方法是什么?是否有任何库可以处理所有这些格式,并以某种统一格式为我提供datetime?您正在查看python的datetime模块。我们使用将datetime字符串转换为datetime对象,然后使用执行诸如减去分钟和小时之类

我有一个场景,在这个场景中,我可以获得以下任何格式的日期时间

1) 以下格式的字符串:1970-01-01T00:00:00

2) “现在-500万”

3) “现在-1h”


或者与min,second,甚至day类似的组合,我想得到一个比给定时间长x min的时间,最好的方法是什么?是否有任何库可以处理所有这些格式,并以某种统一格式为我提供datetime?

您正在查看python的
datetime
模块。我们使用将datetime字符串转换为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))
输出将为
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
现在,为了避免必须提供
小时、分钟、天
等作为参数,您可以将它们全部转换为标准格式(例如
分钟
),然后使用该格式

例如,如果你想减去1小时5分钟,你可以减去65分钟

#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
relativedelta
函数中使用它,也许可以扩展此函数以包含更多类型的时间字符串
同样地,你可以提出一个标准时间,把你所有的时间都转换成,然后在论点中使用它

您正在查看python的
datetime
模块。我们使用将datetime字符串转换为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))
输出将为
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
现在,为了避免必须提供
小时、分钟、天
等作为参数,您可以将它们全部转换为标准格式(例如
分钟
),然后使用该格式

例如,如果你想减去1小时5分钟,你可以减去65分钟

#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
relativedelta
函数中使用它,也许可以扩展此函数以包含更多类型的时间字符串 同样地,你可以提出一个标准时间,把你所有的时间都转换成,然后在论点中使用它

您可以这样组合:

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))
它返回:

1969-12-31 22:55:00
您可以这样组合:

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))
它返回:

1969-12-31 22:55:00
要测试和完善的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
要测试和完善的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

在做了更多的研究之后,我发现有一个名为dateparser的模块,它提供了一种解析方法,使用parse方法我们可以将任何格式转换为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


您可以在以下位置阅读更多内容:

在做了更多研究之后,我发现有一个名为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和案例3如何?我想用统一的代码来处理所有的案子?1970-01-01T00:00:00只是一个可能的值,它可以是“now-30s”或“not-1d”,我不想手动处理所有情况。情况2和3已发布,对于任何其他情况,您可以相应地在
datetime.timedelta
中指定参数。可能的是,如果手动执行此操作,则有许多选项,s、m、h、d、w,m左右,我将不得不手动检查什么是震级和单位,然后根据该值将其转换为等价的时间增量格式,我试图避免这种情况。在这种情况下,我是否可以建议将所有这些选项转换为标准时间格式,例如,全部转换为秒,然后使用datetime.timedelta(秒=x)@TajUddin@DeveshKumarSingh,稍微修改一下你的例子。更紧凑:)案例2和案例3呢?我想用统一的代码来处理所有的案子?1970-01-01T00:00:00只是一个可能的值,它可以是“now-30s”或“not-1d”,我不想手动处理所有情况。情况2和3已发布,对于任何其他情况,您可以相应地在
datetime.timedelta
中指定参数。可能的是,如果手动执行此操作,则有许多选项,s、m、h、d、w,m左右,我将不得不手动检查什么是震级和单位,然后根据该值将其转换为等价的时间增量格式,我试图避免这种情况。在这种情况下,我是否可以建议将所有这些选项转换为标准时间格式,例如,全部转换为秒,然后使用datetime.timedelta(秒=x)@TajUddin@DeveshKumarSingh,稍微修改一下你的例子。更紧凑:)现在实际上是一个字符串吗?我的意思是,你的输入准确地说是“现在-5m”吗?@LanteDellarovere是的。“现在”实际上是一个字符串吗?“我的意思是,你的输入准确地说是“现在-5m”?@Lanteldellarovere是的。太好了,那样的话你可以接受