python时间问题

python时间问题,python,django-models,time,exif,Python,Django Models,Time,Exif,我正在使用图书馆。打完电话 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) 它返回“instance”,

我正在使用图书馆。打完电话

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)
它返回“instance”,而不是float,后者是

type(time.time())

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

看起来EXIF.py返回IFD_标记的实例。您想要的值可以是t值。您还可以使用datetime.strtime()解析从exif数据中获取的字符串。

Django最适合处理
datetime
对象。字符串可以转换为
datetime
,但您不应将重点放在字符串上。您应该专注于创建适当的
datetime
对象

选择一。计算出exif时间的实际类别。不要用
type(t)
,而是用
t.\uu class\uuu
来看看它到底是什么。另外,还可以使用dir(t)查看它有哪些方法。它可能有一些方法可以创建适当的浮点值或
time.struct\u time

选择2。使用
datetime.datetime.strtime
解析时间字符串,以创建适当的
datetime
对象。阅读以下内容:

用于解析
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'
>>> 

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