Python 如何将isoformat中包含datetime的字符串转换为日期和时间值?

Python 如何将isoformat中包含datetime的字符串转换为日期和时间值?,python,Python,我有以下字符串格式(Python 3.6): 我把它作为脚本的一个参数。 我想将日期设置为“YYYY-MM-DD”,时间设置为“HH:MM” 我试图用以下方法将其转换: from datetime import datetime if __name__ == '__main__': start_timestamp = sys.argv[1] start_date = datetime.strptime(sys.argv[1], '%Y-%m-%d') start_tim

我有以下字符串格式(Python 3.6):

我把它作为脚本的一个参数。 我想将日期设置为“YYYY-MM-DD”,时间设置为“HH:MM”

我试图用以下方法将其转换:

from datetime import datetime
if __name__ == '__main__':
    start_timestamp = sys.argv[1]
    start_date =  datetime.strptime(sys.argv[1], '%Y-%m-%d')
    start_time =  datetime.strptime(sys.argv[1], '%H:%M')
但这给了:

ValueError: unconverted data remains: T10:04:57.426872
在上面的示例中,我想看到:

start_date = '2018-11-19'
start_time = '10:04'

您需要将整个字符串解析为一个datetime对象,然后从中提取所需的值

dt = datetime.datetime.strptime('2018-11-19T10:04:57.426872', '%Y-%m-%dT%H:%M:%S.%f')
d = dt.date()
t = dt.time()
print(d.strftime('%Y-%m-%d'))
print(t.strftime('%H:%M'))
哪些产出:

2018-11-19
10:04

由于日期似乎是ISO格式,因此

start = datetime.datetime.fromisoformat(text)
将正确解析它。从那里你可以得到你的日期和时间

start_date = start.strftime("%Y-%m-%d")
start_time = start.strftime("%H:%M")
编辑:

对于Python<3.7,可以使用以下格式:

start = datetime.datetime.strptime(text, "%Y-%m-%dT%H:%M:%S.%f")

对于“重复”日期时间混淆:我使用了
importdatetime
。如果使用datetime import datetime中的
,则可以去掉额外的
datetime。

试试这个:我们有一个用于解析日期的最佳软件包,名为dateutil

from dateutil import parser
date1='2018-11-19T10:04:57.426872'
print 'Start_date:',parser.parse(date1).strftime("%Y-%m-%d") 
print 'Start_time:',parser.parse(date1).strftime("%H:%M")

Result:Start_date:2018-11-19
       Start_time:10:04

作为
strtime
参数提供的模式必须覆盖整个字符串,否则不清楚这些信息在字符串中的位置。提取小时和分钟的Als:如果您的模式可以工作,它会提取
10:04
还是
04:57
?@ChristianKönig当我这样做时:
打印datetime.datetime.utcnow().isoformat()
我得到:
2018-11-19T12:01:54.579000
,以及当我打印
datetime.datetime.utcnow()时
我得到了
2018-11-19 12:01:54.579000
所以在这种情况下
开始时间应该是
12:01
属性错误:键入object'datetime.datetime'没有来自isoformat'的属性@Luis只需删除一个
datetime
就可以阅读
start=datetime.fromsofisoformat(text)
啊,你说得对。将进行编辑。@toti08已经进行了编辑。错误是在我删除了冗余的datetime之后发生的。我认为这个函数是在Python3.7中引入的,我运行Python3。6@toti08我尝试了datetime.datetime.fromsoformat(start\u timestamp)和datetime.fromsoformat(start\u timestamp),都是相同的错误。此函数不适用于Python 3.6
from dateutil import parser
date1='2018-11-19T10:04:57.426872'
print 'Start_date:',parser.parse(date1).strftime("%Y-%m-%d") 
print 'Start_time:',parser.parse(date1).strftime("%H:%M")

Result:Start_date:2018-11-19
       Start_time:10:04