【问题标题】:How to remove : after a + or - in python [duplicate]如何删除:在python中的+或-之后[重复]
【发布时间】:2015-11-06 13:25:24
【问题描述】:

我有一个类似于 2015-11-06T14:20:14.011+01:00 的时间戳。我想将其解析为日期时间。 我的想法是我可以使用%Y-%m-%dT%H:%M:%S.%f%z 作为代表。

但问题是时区中的冒号。如何删除时区中的冒号,或者有没有更好的方法作为%z

【问题讨论】:

  • : 是否总是倒数第三个字符?
  • s.rsplit(':', 1)[0] 将是最后一个冒号之前的所有内容。
  • %z(小写)是 +/- HHMM 格式的时区表示。
  • SirParselot:如果用户在 api 中没有设置时区,则时区丢失。 DanielRoseman:我没有测试系统,并且在 python 文档网站上以另一种方式提及。 docs.python.org/2/library/…
  • @J.F.塞巴斯蒂安是的,但很难找到。

标签: python string parsing datetime timezone


【解决方案1】:

您有一个 ISO 8601 日期时间字符串。不要费心去解析它或手动摆弄它(参见:XY Problem)。使用 Python 的 iso8601 库。

import iso8601
parsed = iso8601.parse_date("2015-11-06T14:20:14.011+01:00")

如果要从中删除时区信息,请使用replace 方法。

tz_stripped = parsed.replace(tzinfo=None)

【讨论】:

  • 你知道iso8601是否在默认的python中?
  • 不,你需要从 PyPI 安装它。
  • 好的,谢谢。我已将文件复制到同一文件夹中,并且可以正常工作。所以我不需要安装。
【解决方案2】:
import re
original = '2015-11-06T14:20:14.011+01:00'
replaced = re.sub(r'([+-]\d+):(\d+)$', r'\1\2', original)
# replaced == '2015-11-06T14:20:14.011+0100'

这将仅在冒号前面有加号或减号时替换冒号,并由数字包围直到字符串的末尾。

【讨论】:

    【解决方案3】:

    我认为最好的方法是使用 dateutils https://labix.org/python-dateutil

    from dateutil.parser import parse
    original = '2015-11-06T14:20:14.011+01:00'
    print "Original Date {}".format(original)
    new_date =  parse(original)
    print new_date
    print type(new_date)
    # print new_date.hour
    # print new_date.minute
    # print new_date.second
    print "New Date 1 {}".format(new_date.strftime('%Y-%m-%d %H:%M:%S'))
    print "New Date 2 {}".format(new_date.strftime('%Y-%m-%dT%H:%M:%S.%f%z'))
    

    输出:

    Original Date 2015-11-06T14:20:14.011+01:00
    2015-11-06 14:20:14.011000+01:00
    <type 'datetime.datetime'>
    New Date 1 2015-11-06 14:20:14
    New Date 2 2015-11-06T14:20:14.011000+0100
    

    问候

    【讨论】:

      猜你喜欢
      • 2019-11-22
      • 2019-11-13
      • 2020-09-08
      • 1970-01-01
      • 2021-07-19
      • 2019-04-10
      • 2021-03-14
      • 2021-09-14
      • 1970-01-01
      相关资源
      最近更新 更多