【问题标题】:python time problempython时间问题
【发布时间】:2010-07-20 12:41:16
【问题描述】:

我正在使用exif.py 库。调用后

tags=exif.process_file(...)

我想检索图像的拍摄时间。所以我继续

t =tags['Image DateTime'] if tags.has_key('Image DateTime') else time.time()

现在我想将 t 存储在 django 的数据库中。为此 t 必须采用 2010-07-20 14:37:12 的形式,但显然 exif 提供 2010:07:20 14:37:12 但是当我去时

type(t)

它返回“实例”,而不是作为结果的浮点数

type(time.time())

或“str”,它是字符串的类型。如何解析 EXIF 给我的值以将其填充到 django 模型中?

【问题讨论】:

    标签: python django-models time exif


    【解决方案1】:

    使用time.strptime() 解析str() 值,而不是将时间元组格式化为任何所需的形式。

    一个例子,使用 EXIF 返回的 'Image DateTime' 属性。

    >>> e1['Image DateTime']
    (0x0132) ASCII=2007:09:06 06:37:51 @ 176
    >>> str(e1['Image DateTime'])
    '2007:09:06 06:37:51'
    >>> 
    >>> tag = time.strptime(str(e1['Image DateTime']),"%Y:%m:%d %H:%M:%S")
    >>> tag
    time.struct_time(tm_year=2007, tm_mon=9, tm_mday=6, tm_hour=6, tm_min=37, tm_sec=51,tm_wday=3, tm_yday=249, tm_isdst=-1)
    >>> time.strftime("%Y-%m-%d %H:%M:%S", tag)
    '2007-09-06 06:37:51'
    >>> 
    

    【讨论】:

      【解决方案2】:

      Django 最适合使用 datetime 对象。字符串可以转换为datetime,但你不应该专注于字符串。您应该专注于创建正确的 datetime 对象。

      选择 1. 找出 exif 时间的实际类。而不是type(t),做t.__class__ 看看它到底是什么。另外,dir(t) 看看它有什么方法。它可能具有创建适当浮点值或time.struct_time 值的方法。

      选择 2. 使用 datetime.datetime.strptime 解析时间字符串以创建正确的 datetime 对象。阅读:http://docs.python.org/library/datetime.html#datetime.datetime.strptime

      【讨论】:

        【解决方案3】:

        看起来 exif.py 返回了一个 IFD_Tag 的实例。您想要的值可能在 t.values 中。您还可以使用 datetime.strptime() 来解析从 exif 数据中获取的字符串。

        【讨论】:

          【解决方案4】:

          假设 tags['Image DateTime'],如果存在,返回一个类似“2010:07:20 14:37:12”的字符串,那么你可以使用:

          if tags.has_key('Image DateTime'):
              t = tags['Image DateTime'].replace(':', '-' , 2)
          else:
              t = time.strftime('%Y-%m-%d %H:%M:%S')
          

          replace 修复了 exif 中的时间字符串:

          >>> '2010:07:20 14:37:12'.replace(':', '-', 2)
              '2010-07-20 14:37:12'
          

          如果您想要 GMT 而不是当地时间,请使用

          time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime())
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-09-04
            • 2015-02-10
            • 2023-04-04
            • 2015-08-23
            • 1970-01-01
            • 1970-01-01
            • 2020-05-09
            相关资源
            最近更新 更多