python时间问题

时间:2010-07-20 12:41:17

标签: python django-models time exif

我正在使用exif.py库。致电后

tags=exif.process_file(...)

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

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

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

type(t)

它返回'instance'而不是float,这是

的结果
type(time.time())

或'str'是字符串的类型。我如何解析EXIF让我把它放入django模型的值?

4 个答案:

答案 0 :(得分:2)

使用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'
>>> 

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

假设标签['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())