2015-04-01 93 views
0

我想使用下面的代码将熊猫日期时间转换为时代。蟒蛇时间mktime抛出错误

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。我在这里错过了什么?

回答

2

你莫名其妙定置time等于在你的代码unicode对象,你也可以不通过Timestampstrptime它必须是一个

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 
+0

是的,你是对的。我正在读入一个名为'时间'的变量。谢谢! – ubh 2015-04-01 23:39:24

+0

没有问题。不客气, – 2015-04-01 23:56:59

+0

@ J.F.Sebastian,对不起,意思是说strptime。 – 2015-04-02 20:35:55

1

这不是对错误的解释(请参阅Padraic Cunningham的答案),而是实现最终目标的更短途径。您可能会将compare_date转换为时间元组。这是大熊猫做的一个直接的方式:

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) 
+0

是的,我可以通过做time.mktime(compare_date.timetuple())来获得时代。 – ubh 2015-04-01 23:45:21

0

mktime()错误的@Padraic Cunningham's answer的解释。

  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 
    

两种解决方案都忽略闰秒(除非“正确的”时区是在第二届一个使用)。