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()
错误的解释。
pandas.datetime
是 datetime.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()
可能会失败!
要更直接地获取时间戳(纪元时间),可以使用time.time()
:
import time
timestamp = time.time() - 60 * 86400 # 60 days ago
两种解决方案都忽略闰秒(除非在第二个中使用 "right" 时区)。
我正在尝试使用以下代码将 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()
错误的解释。
pandas.datetime
是datetime.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()
可能会失败!要更直接地获取时间戳(纪元时间),可以使用
time.time()
:import time timestamp = time.time() - 60 * 86400 # 60 days ago
两种解决方案都忽略闰秒(除非在第二个中使用 "right" 时区)。