python时间问题

发布于 2024-09-10 14:35:54 字数 561 浏览 8 评论 0原文

我正在使用 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 模型中?

I am using the exif.py library. After calling

tags=exif.process_file(...)

i want to retrieve the time the image was captured. so i continue with

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

now i want to store t in django's database. For that t must be in the form 2010-07-20 14:37:12 but apparently exif delivers 2010:07:20 14:37:12 however when i go

type(t)

it returns 'instance' as opposed to float which is the result of

type(time.time())

or 'str' which is the type of string. How can I parse the value EXIF gave me to stuff it into the django model?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

困倦 2024-09-17 14:35:54

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

使用 EXIF 返回的“图像日期时间”属性的示例。

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

Use time.strptime() to parse the str() value, than format the time tuple to any desired form.

An example, using the 'Image DateTime' attribute returned by EXIF.

>>> 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'
>>> 
給妳壹絲溫柔 2024-09-17 14:35:54

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

选择 1. 找出 exif 时间的实际类别。使用 t.__class__ 代替 type(t) 来查看它到底是什么。另外,dir(t) 看看它有哪些方法。它可能具有创建适当的浮点值或 time.struct_time 值的方法。

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

Django works best with datetime objects. Strings can be converted to datetime, but you should not focus on strings. You should focus on creating a proper datetime object.

Choice 1. Figure out what actual class the exif time is. Instead of type(t), do t.__class__ to see what it really is. Also, so dir(t) to see what methods it has. It may have methods which will create a proper float value or time.struct_time value.

Choice 2. Parse the time string with datetime.datetime.strptime to create a proper datetime object. Read this: http://docs.python.org/library/datetime.html#datetime.datetime.strptime

微凉 2024-09-17 14:35:54

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

It looks like exif.py returns an instance of IFD_Tag. The values you want may be in t.values. You can also use datetime.strptime() to parse the string you get from the exif data.

猫弦 2024-09-17 14:35:54

假设 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())

Assuming that tags['Image DateTime'], if present, returns a string like "2010:07:20 14:37:12" then you can use:

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

replace fixes the time-string from exif:

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

If you want GMT rather than local time use

time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime())
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文