【问题标题】:Change various strings to timestamp Python 3?将各种字符串更改为时间戳 Python 3?
【发布时间】:2020-03-08 10:25:54
【问题描述】:

考虑到我可以从我的用户(聊天机器人)那里获得的所有可能的时间格式:

09:03
9:23A.M.
9:23 A.m.
13:44 pm
20:00 P.m
15:40
00:00
12:33
4:33p.M
...

我想将它们转换为适当的时间。不会有我可以使用的一种格式。

请告知如何解决此类问题?

我已尝试使用 datetime 包中的 strptime,但我需要指定格式,并且每次都可能不同。

【问题讨论】:

    标签: python-3.x datetime time


    【解决方案1】:

    感谢amazing 来源,找到我的答案! 为他人发帖:

    dateutil
    

    dateutil 模块是 datetime 模块的扩展。我们不需要传递任何解析代码来解析字符串。例如:

    from dateutil.parser import parse
    
    datetime = parse('2018-06-29 22:21:41')
    
    print(datetime)
    This parse function will parse the string automatically and store it in the datetime variable. Parsing is done automatically. You don't have to mention any format string. Let's try to parse different types of strings using dateutil:
    
    from dateutil.parser import parse
    
    date_array = [
        '2018-06-29 08:15:27.243860',
        'Jun 28 2018  7:40AM',
        'Jun 28 2018 at 7:40AM',
        'September 18, 2017, 22:19:55',
        'Sun, 05/12/1999, 12:30PM',
        'Mon, 21 March, 2015',
        '2018-03-12T10:12:45Z',
        '2018-06-29 17:08:00.586525+00:00',
        '2018-06-29 17:08:00.586525+05:00',
        'Tuesday , 6th September, 2017 at 4:30pm'
    ]
    
    for date in date_array:
        print('Parsing: ' + date)
        dt = parse(date)
        print(dt.date())
        print(dt.time())
        print(dt.tzinfo)
        print('\n')
    
    Output:
    
    $ python3 dateutil-1.py
    Parsing: 2018-06-29 08:15:27.243860
    2018-06-29
    08:15:27.243860
    None
    
    Parsing: Jun 28 2018  7:40AM
    2018-06-28
    07:40:00
    None
    
    Parsing: Jun 28 2018 at 7:40AM
    2018-06-28
    07:40:00
    None
    
    Parsing: September 18, 2017, 22:19:55
    2017-09-18
    22:19:55
    None
    
    Parsing: Sun, 05/12/1999, 12:30PM
    1999-05-12
    12:30:00
    None
    
    Parsing: Mon, 21 March, 2015
    2015-03-21
    00:00:00
    None
    
    Parsing: 2018-03-12T10:12:45Z
    2018-03-12
    10:12:45
    tzutc()
    
    Parsing: 2018-06-29 17:08:00.586525+00:00
    2018-06-29
    17:08:00.586525
    tzutc()
    
    Parsing: 2018-06-29 17:08:00.586525+05:00
    2018-06-29
    17:08:00.586525
    tzoffset(None, 18000)
    
    Parsing: Tuesday , 6th September, 2017 at 4:30pm
    2017-09-06
    16:30:00
    None
    

    您可以看到几乎任何类型的字符串都可以使用 dateutil 模块轻松解析。

    Maya
    

    Maya 还使解析字符串和更改时区变得非常容易。一些简单的例子如下所示:

    import maya
    
    dt = maya.parse('2018-04-29T17:45:25Z').datetime()
    print(dt.date())
    print(dt.time())
    print(dt.tzinfo)
    Output:
    
    $ python3 maya-1.py
    2018-04-29
    17:45:25
    UTC
    For converting the time to a different timezone:
    
    import maya
    
    dt = maya.parse('2018-04-29T17:45:25Z').datetime(to_timezone='America/New_York', naive=False)
    print(dt.date())
    print(dt.time())
    print(dt.tzinfo)
    Output:
    
    $ python3 maya-2.py
    2018-04-29
    13:45:25
    America/New_York
    

    现在不是那么容易使用吗?让我们用与dateutil 相同的字符串集来试试maya

    import maya
    
    date_array = [
        '2018-06-29 08:15:27.243860',
        'Jun 28 2018  7:40AM',
        'Jun 28 2018 at 7:40AM',
        'September 18, 2017, 22:19:55',
        'Sun, 05/12/1999, 12:30PM',
        'Mon, 21 March, 2015',
        '2018-03-12T10:12:45Z',
        '2018-06-29 17:08:00.586525+00:00',
        '2018-06-29 17:08:00.586525+05:00',
        'Tuesday , 6th September, 2017 at 4:30pm'
    ]
    
    for date in date_array:
        print('Parsing: ' + date)
        dt = maya.parse(date).datetime()
        print(dt)
        print(dt.date())
        print(dt.time())
        print(dt.tzinfo)
    Output:
    
    $ python3 maya-3.py
    Parsing: 2018-06-29 08:15:27.243860
    2018-06-29 08:15:27.243860+00:00
    2018-06-29
    08:15:27.243860
    UTC
    
    Parsing: Jun 28 2018  7:40AM
    2018-06-28 07:40:00+00:00
    2018-06-28
    07:40:00
    UTC
    
    Parsing: Jun 28 2018 at 7:40AM
    2018-06-28 07:40:00+00:00
    2018-06-28
    07:40:00
    UTC
    
    Parsing: September 18, 2017, 22:19:55
    2017-09-18 22:19:55+00:00
    2017-09-18
    22:19:55
    UTC
    
    Parsing: Sun, 05/12/1999, 12:30PM
    1999-05-12 12:30:00+00:00
    1999-05-12
    12:30:00
    UTC
    
    Parsing: Mon, 21 March, 2015
    2015-03-21 00:00:00+00:00
    2015-03-21
    00:00:00
    UTC
    
    Parsing: 2018-03-12T10:12:45Z
    2018-03-12 10:12:45+00:00
    2018-03-12
    10:12:45
    UTC
    
    Parsing: 2018-06-29 17:08:00.586525+00:00
    2018-06-29 17:08:00.586525+00:00
    2018-06-29
    17:08:00.586525
    UTC
    
    Parsing: 2018-06-29 17:08:00.586525+05:00
    2018-06-29 12:08:00.586525+00:00
    2018-06-29
    12:08:00.586525
    UTC
    
    Parsing: Tuesday , 6th September, 2017 at 4:30pm
    2017-09-06 16:30:00+00:00
    2017-09-06
    16:30:00
    UTC
    

    如您所见,所有日期格式均已解析,但您注意到其中的不同了吗?如果我们不提供时区信息,它会自动将其转换为 UTC。因此,需要注意的是,如果时间不是 UTC,我们需要提供 to_timezone 和 naive 参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-14
      • 2021-11-19
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 2019-08-14
      相关资源
      最近更新 更多