【问题标题】:Converting values of dictionary to the timestamp format将字典的值转换为时间戳格式
【发布时间】:2015-10-09 14:16:10
【问题描述】:

我有这样的字典:

>>print xdict 
{'time': [(2015, 6, 3, 10, 41, 3), (2015, 6, 3, 20, 32, 21), ..., ...]}

这是一种将这些值转换为时间戳格式的方法吗?我想变成这样:

print xdict
{'time': [1433320863.0, 1433356341.0, ..., ...]}

【问题讨论】:

  • 我尝试了几种使用日期时间进行转换的方法,但最后仍然没有得到我想要的。;/
  • 是的,可以执行该计算。显示您尝试过的代码,以便我们解释为什么它不起作用并更正它。
  • @Kyll:这个问题显然不是太宽泛。它有简洁的答案。

标签: python datetime dictionary timestamp type-conversion


【解决方案1】:

您的时间元组不代表 UTC 时间。如果它是您的本地时区,并且相应时间的 utc 偏移规则与现在相同,或者如果 C 时间库可以访问您平台上的历史时区数据库,那么您可以将时间元组传递给 time.mktime() 到获取“自纪元以来的秒数”:

#!/usr/bin/env python
import time

x = {'time': [(2015, 6, 3, 10, 41, 3), (2015, 6, 3, 20, 32, 21)]}
x['time'] = [time.mktime(tt + (-1,)*3) for tt in x['time']]

否则,您应该使用pytz 来访问所有平台上的 tz 数据库并计算与输入时间元组相对应的正确“自纪元以来的秒数”(POSIX 时间戳):

#!/usr/bin/env python
from datetime import datetime
import pytz # $ pip install pytz
import tzlocal # $ pip install tzlocal

local_timezone = tzlocal.get_localzone() # pytz tzinfo representing local time
epoch = datetime(1970, 1, 1, tzinfo=pytz.utc)
x = {'time': [(2015, 6, 3, 10, 41, 3), (2015, 6, 3, 20, 32, 21)]}
x['time'] = [(local_timezone.localize(datetime(*tt), is_dst=None) - epoch).total_seconds()
             for tt in x['time']]

【讨论】:

  • 感谢您回答并为 Stack Overflow 做出贡献,但是请再看一下这个问题,因为根据help center,它似乎离题了。回答离题的问题看起来好像可以问这样的问题 - 事实并非如此。离题的问题可能会被关闭然后删除,这将使您的贡献无效!
  • @J.F. Sebastian 谢谢你的回答,但你能解释一下这一行吗? time.mktime(tt + (-1,)*3) ... ?
  • @Kyll:我不认为这个问题是题外话。如果您不发布模板 cmets 并提供针对此问题的特定原因,我会很合适。
  • @MateuszMateja:尝试 Python REPL 中的部分,例如 (-1,)*3 == (-1, -1, -1)tt + (-1,)*3 == (2015, 6, 3, 10, 41, 3, -1, -1, -1)
  • @J.F. Sebastian 非常感谢您深入回答我的问题。现在我也可以将它应用于其他事情。干杯!
【解决方案2】:

遍历列表并执行下面的代码。你需要time.mktime才能变成秒

import time
import datetime

a = (2015, 6, 3, 10, 41, 3)

b = datetime.datetime.strptime(', '.join(str(x) for x in a),'%Y, %m, %d, %H, %M, %S')

print(time.mktime(b.timetuple()))

>>> 1433342463.0

【讨论】:

  • 元组可以解压到日期时间初始化器中。
【解决方案3】:

用解压的元组初始化 datetime.datetime(通过 * 运算符)。 然后使用 map 和 lambda 可以轻松实现目标。

import time
import datetime

def transform(xdict):
  return {"time": map(lambda k: time.mktime(datetime.datetime(*k).timetuple()), xdict["time"])}

【讨论】:

  • edit 提供更多信息。纯代码答案是discouraged,因为它们不包含可搜索的内容,也没有解释为什么有人应该“试试这个”。有很多这样糟糕的答案的例子;但你不想成为那些人中的一员,对吧?
  • 非常感谢! ;)
  • 这个答案是我一直在寻找的——准确地解决我的问题,所以我认为不鼓励这样的答案更糟糕。为@Radek Luner 干杯!
  • @J.F.Sebastian - 你认为我对答案投了反对票的假设是没有根据的,而且它碰巧不正确。
  • @J.F.Sebastian - 我鼓励新用户写出更完整的答案,让更多人受益。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 2017-02-13
  • 2015-09-08
  • 1970-01-01
  • 2016-11-26
  • 2016-05-24
相关资源
最近更新 更多