>>> import time
>>> time.strptime("01-31-2009", "%m-%d-%Y")
(2009, 1, 31, 0, 0, 0, 5, 31, -1)
>>> time.mktime((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233378000.0
>>> 60*60*24 # seconds in a day
86400
>>> 1233378000.0 / 86400
14275.208333333334

time.mktime应该返回自纪元以来的秒数。 因为我在午夜给它一个时间而且这个时期在午夜,所以结果不应该被一天中的秒数整除吗?

===============>>#1 票数:7

简短的回答:因为时区。

Epoch是UTC。

例如,我在IST(爱尔兰标准时间)或UTC + 1。 time.mktime()是相对于我的时区,所以在我的系统上这是指

>>> time.mktime((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233360000.0

因为你得到了结果1233378000,这表明你落后我5个小时

>>> (1233378000 - 1233360000) / (60*60)    
5

看一下UTC的time.gmtime()函数。

===============>>#2 票数:3

mktime(...)
    mktime(tuple) -> floating point number

    Convert a time tuple in local time to seconds since the Epoch.

当地时间......想象一下。

时间元组:

The other representation is a tuple of 9 integers giving local time.
The tuple items are:
  year (four digits, e.g. 1998)
  month (1-12)
  day (1-31)
  hours (0-23)
  minutes (0-59)
  seconds (0-59)
  weekday (0-6, Monday is 0)
  Julian day (day in the year, 1-366)
  DST (Daylight Savings Time) flag (-1, 0 or 1)
If the DST flag is 0, the time is given in the regular time zone;
if it is 1, the time is given in the DST time zone;
if it is -1, mktime() should guess based on the date and time.

顺便说一下,我们似乎相隔6个小时:

>>> time.mktime((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233356400.0
>>> (1233378000.0 - 1233356400)/(60*60)
6.0

===============>>#3 票数:2

菲尔的答案真的解决了它,但我会详细说明一点。 由于纪元是UTC格式,如果我想将其他时间与时期进行比较,我还需要将它们解释为UTC。

>>> calendar.timegm((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233360000
>>> 1233360000 / (60*60*24)
14275

到时候的元组转换为时间戳治疗是UTC时间,我得到了一些它由以秒为单位,每天数整除。

我可以用这个来将日期转换为一个从纪元日开始的日期,这是我最终追求的。

===============>>#4 票数:0

有趣。 我不知道,但我确实试过这个:

>>> now = time.mktime((2008, 8, 22, 11 ,17, -1, -1, -1, -1))
>>> tomorrow = time.mktime((2008, 8, 23, 11 ,17, -1, -1, -1, -1))
>>> tomorrow - now
86400.0

这是你所期望的。 我猜? 也许从时代开始就进行了一些时间的修正。 这可能只有几秒钟,就像闰年。 我想我以前听过这样的话,但是不记得究竟是怎么做的和什么时候做的......

  ask by Daniel Benamy translate from so

未解决问题?本站智能推荐:

2回复

Python:time.mktime在不同日期返回相同的值

我正在使用一些python脚本来计算自较旧日期以来所花费的时间,并且令人惊讶地得出了负面结果。 我意识到问题可能出在time.mktime函数中。 让我们获取以下代码: 在我的Linux 32位Python 2.6.4上,输出为: 2010-10-17 00:00:00 =
1回复

如何将Series对象传递给time.mktime?

我的数据框中的一列是dtype datetime64 ,格式为2011-01-01 00:00:00 现在,我想在新的df中复制列,并将值转换为UTC时间戳。 我尝试了以下方法: 执行最后两个语句后,它会抛出以下错误: 我应该用什么方法来获取数据帧的BaseDateTi
1回复

time.mktime时区是否在python中免费?

我试图了解时代的本质及其行为。 下面我用2个不同的时区特定日期时间和1个天真的日期时间尝试相同的日期 它们都有相同的时代,但这是令人惊讶的,因为pst中的相同日期应该相对于utc偏移7小时。 有人可以解释一下吗? 谢谢
1回复

time.mktime time.strptime返回负数

这段代码: 返回: 我为什么得到负数? 谢谢你的帮助。 史蒂夫
1回复

pd.to_datetime与time.mktime不一致

结果是: 我希望它们是相同的,因为我们通常将TimpStamp转换为秒,然后再转换回它们。 我了解这与时区有关,但是如何消除时区影响? 编辑:软件包信息:Python 3.6,Pandas 0.23.1和dateutil 2.7.3本地时区:UTC + 8
3回复

python time mktime抛出错误

我正在尝试使用以下代码将大熊猫日期时间转换为纪元。 抛出错误 我也尝试过此代码 而且,它仍然抛出相同的错误。 我正在使用Python版本2.7.5。 我在这里想念什么?
1回复

使用熊猫到日期时间功能时日期错误

给我以下输出: 当我使用pd.to_datetime() ,有些月份和几天会发生变化: 从输出24到29切换月份和日期。 我想将“ Transaction date ”列更改为datetime64[ns]类型,但要使用一种格式yyyy/mm/dd设置我的日期。 上面是格
3回复

日期时间转换为纪元时间

我需要使用Python <= 2.7转换格式存储在变量中的时间 这样的时间(自1970年1月1日午夜开始) 最好是导入时间模块,还是只是拆分并使用一些数学计算?
6回复

似乎无法在Python中的相同脚本中使用导入时间和导入日期时间

我在Windows上使用Python 2.7,我正在编写一个使用时间和日期时间模块的脚本。 我以前做过这个,但是python似乎对于加载两个模块以及之前使用过的方法似乎并不敏感。 这是我使用的不同语法和我目前得到的错误。 首先我试过: 错误: else: time.slee
2回复

快速的日期和时间转换

我有看起来像这样的数据: 为了使它看起来像这样: 我创建了以下函数: 因此,我正在做的是将DATE列转换为包括连字符,而TIME_M列变成一个“时间”列,该列现在从午夜开始数秒而不是常规的24小时制时间。 我的问题是,这需要一段时间才能运行。 有没有更有效的方法来