【问题标题】:Date Time Formats in PythonPython 中的日期时间格式
【发布时间】:2013-07-09 18:42:08
【问题描述】:

这些日期时间格式是什么?我需要将它们转换为相同的格式,以检查它们是否相同。这些只是两个来自单独的数据源,所以我需要找到一种方法使它们具有相同的格式。有什么想法吗?

  • 2013-07-12T07:00:00Z

  • 2013-07-10T11:00:00.000Z

提前致谢

【问题讨论】:

标签: python date datetime time datetime-format


【解决方案1】:

额外的.000 是微秒。

这会将格式的日期字符串转换为日期时间对象。

import datetime
d1 = datetime.datetime.strptime("2013-07-12T07:00:00Z","%Y-%m-%dT%H:%M:%SZ")
d2 = datetime.datetime.strptime("2013-07-10T11:00:00.000Z","%Y-%m-%dT%H:%M:%S.%fZ")

然后根据您的要求将它们转换为任何格式,使用:

new_format = "%Y-%m-%d"
d1.strftime(new_format)

【讨论】:

  • 谢谢,这真的很有帮助——它有效。我该如何扭转它呢?所以我可以将 d1 或 d2 转换回原来的日期时间格式。提前致谢
  • @user1579970 "2013-07-12T07:00:00Z" 是一个字符串,d1 是一个日期时间对象。您可以使用 strftime() 将日期时间对象转换为您想要的任何格式的字符串。所以在这种情况下你会做d1.strftime("%Y-%m-%dT%H:%M:%SZ")
  • @user1579970 如果对您有用,请通过accepting the answer 关闭问题。
  • 非常感谢你
【解决方案2】:

也许使用.isoformat()

ISO 8601 格式的字符串,YYYY-MM-DDTHH:MM:SS[.mmmmmm][+HH:MM]

>>> import datetime
>>> datetime.datetime.utcnow().isoformat() + "Z"
'2013-07-11T22:26:51.564000Z'
>>>

Z 指定“zulu”时间或 UTC。

您还可以通过应用适当的 tzinfo 对象使您的日期时间对象时区感知来添加时区组件。应用 tzinfo 后,.isoformat() 方法将在输出中包含适当的 utc 偏移量:

>>> d = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc)
>>> d.isoformat()
'2019-11-11T00:52:43.349356+00:00'

您可以通过将 microseconds 值更改为 0 来删除 microseconds

>>> no_ms = d.replace(microsecond=0)
>>> no_ms.isoformat()
'2019-11-11T00:52:43+00:00'

此外,从 python 3.7 开始,.fromisoformat() 方法可用于将 iso 格式的日期时间字符串加载到 python 日期时间对象中:

>>> datetime.datetime.fromisoformat('2019-11-11T00:52:43+00:00')
datetime.datetime(2019, 11, 11, 0, 52, 43, tzinfo=datetime.timezone.utc)

http://www.ietf.org/rfc/rfc3339.txt

【讨论】:

  • 那么我们如何在 3.7 之前解析带有 +00:00 的日期呢? %z 失败....
【解决方案3】:

你可以尝试修剪字符串

data = "2019-10-22T00:00:00.000-05:00"
result1 = datetime.datetime.strptime(data[0:19],"%Y-%m-%dT%H:%M:%S")
result2 = datetime.datetime.strptime(data[0:23],"%Y-%m-%dT%H:%M:%S.%f")
result3 = datetime.datetime.strptime(data[0:9], "%Y-%m-%d")

【讨论】:

    【解决方案4】:

    使用日期时间模块。

    对于变量

    import datetime
    def convertDate(d):
         new_date = datetime.datetime.strptime(d,"%Y-%m-%dT%H:%M:%S.%fZ")
         return new_date.date()
    convertDate("2019-12-23T00:00:00.000Z")
    
    

    您可以将“.date()”更改为“.year”、“.month”、“.day”等...

    输出:# 现在是一个日期时间对象

    datetime.date(2019, 12, 23)
    
    

    对于 DataFrame 列,使用 apply()

    df['new_column'] = df['date_column'].apply(convertDate)
    
    

    【讨论】:

      【解决方案5】:

      * 简短而最佳的方式:

      str(datetime.datetime.now()).replace(' ','T')
      or
      str(datetime.datetime.now()).replace(' ','T') + "Z"
      

      【讨论】:

        猜你喜欢
        • 2018-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-16
        • 2021-12-19
        相关资源
        最近更新 更多