如何处理数据集中的多个DateTimeFormat?

2024-06-25 23:19:25 发布

您现在位置:Python中文网/ 问答频道 /正文

在数据集中,有几个不同的日期时间字符串

例如:

2020-11-16T06:00:00Z

2020-11-16T06:00:00+01:00

2020-11-16T06:00:00+01:00Z

2020-11-16T06:00:00+02:00

2020-11-16T06:00:00.000Z

我曾想过在秒后替换所有内容,但它会给我带来错误,例如,没有首先给出+01:00。。否则

你有clou吗,怎么处理

如果我能得到:

%Y-%m-%dT%H:%m

(基础知识,如何使用strp和strf是已知的…)

我整晚都在为这个问题绞尽脑汁。 希望你们中有人能找到解决办法

提前谢谢你


Tags: 数据字符串内容错误时间基础知识解决办法strp
3条回答

Python有一个处理此问题的标准库:

import dateutil.parser

examples = [
    '2020-11-16T06:00:00Z',
    '2020-11-16T06:00:00+01:00',
    '2020-11-16T06:00:00+01:00Z',
    '2020-11-16T06:00:00+02:00',
    '2020-11-16T06:00:00.000Z'
]

for e in examples:
    try:
        print(dateutil.parser.parse(e))
    except ValueError:
        print(f'Invalid datetime: {e}')

结果:

2020-11-16 06:00:00+00:00
2020-11-16 06:00:00+01:00
Invalid datetime: 2020-11-16T06:00:00+01:00Z
2020-11-16 06:00:00+02:00
2020-11-16 06:00:00+00:00

@Z4-tier也为您的示例提供了一个解决方案(不过请注意不要只保留字符串的结尾),但是dateutil还将处理更奇特的内容:

print(dateutil.parser.parse('15:45 16 Nov 2020'))

结果:

2020-11-16 15:45:00

还要注意这一点:

        print(dateutil.parser.parse(e).tzinfo)

如果添加它,您将看到dateutil在结果中包含关于时区的信息,如果只解析字符串的第一部分,这些信息将丢失

数据集是由一个刮刀生成的,刮刀可以刮取新闻页面

因此,datetime首先被刮取为字符串,因此在执行strTime之前,必须对几个不同的事件进行转换

我为我的问题找到了一个解决方案,这受到你们所有方法的影响。 ''' 日期='2020-11-16T06:00:00+01:00' splitat=19 日期=日期[:splitat] 日期 '''

这导致了标准化的格式,我需要:

'2020-11-16T06:00:00'

这个怎么样:

import datetime

dates = ['2020-11-16T06:00:00Z',
         '2020-11-16T06:00:00+01:00',
         '2020-11-16T06:00:00+01:00Z',
         '2020-11-16T06:00:00+02:00',
         '2020-11-16T06:00:00.000Z']

for d in dates:
    datetime.datetime.fromisoformat(d[0:19])

由于每个日期在偏移量和时区之前都具有相同的格式,所以只需从字符串中去掉该部分并将其转换为datetime.datetime

相关问题 更多 >