python time mktime 抛出错误

python time mktime throwing error

我正在尝试使用以下代码将 pandas 日期时间转换为纪元。

import time
import pandas as pd

compare_date = pd.datetime.today()+pd.DateOffset(days=-60)
print time.mktime(datetime.datetime.strptime(compare_date, "%Y-%m-%d").timetuple())

它抛出一个错误

'unicode' object has no attribute 'mktime'

我也试过这段代码

t = (2009, 2, 17, 17, 3, 38, 1, 48, 0)
secs = time.mktime( t )
print secs

而且,它仍然抛出同样的错误。我正在使用 Python 版本 2.7.5。我在这里错过了什么?

您在代码中以某种方式将 time 设置为 unicode 对象,您也不能将 Timestamp 传递给 strptime 它必须是 字符串

In [15]: time = u"foo"

In [16]: time.mktime
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-16-b93f36374edc> in <module>()
----> 1 time.mktime

AttributeError: 'unicode' object has no attribute 'mktime'

你需要检查你的代码,看看你在哪里引用了 time,在你有 time = some_unicode_object

的地方

不确定最后你想要什么,但在 TimeStamp 对象上使用 strftime 会更接近:

print time.mktime(datetime.datetime.strptime(compare_date.strftime("%Y-%m-%d"), "%Y-%m-%d").timetuple())

1422748800.0

这不是对错误的解释(请参阅 Padraic Cunningham 的回答),而是实现最终目标的更快捷方式。

您似乎正在将 compare_date 转换为时间元组。这是 pandas:

中的直接方法
import pandas as pd
compare_date = pd.datetime.today()+pd.DateOffset(days=-60)
print compare_date.timetuple()

导致:

time.struct_time(tm_year=2015, tm_mon=2, tm_mday=1, tm_hour=1, 
                 tm_min=20, tm_sec=43, tm_wday=6, tm_yday=32, tm_isdst=-1)

见@mktime()错误的解释。

  1. pandas.datetimedatetime.datetime。你应该直接使用它:

    from datetime import datetime, timedelta
    
    compare_date = datetime.utcnow() - timedelta(60)
    posix_timestamp = (compare_date - datetime(1970, 1, 1)).total_seconds()
    

    Converting datetime.date to UTC timestamp in Python

    如果您 compare_date 不是 UTC,那么您应该先将其转换为 UTC。参见 Find if 24 hrs have passed between datetimes - Python -- 注意:mktime() 可能会失败!

  2. 要更直接地获取时间戳(纪元时间),可以使用time.time():

    import time
    
    timestamp = time.time() - 60 * 86400 # 60 days ago
    

两种解决方案都忽略闰秒(除非在第二个中使用 "right" 时区)。