问题描述
我正在转换一些时间戳,例如:
tmp['start'] = tmp['chargingstart'].apply(lambda x: datetime.strptime(x[:19],"%Y-%m-%d %H:%M:%s").timestamp())
我认为这行得通。我期待正整数,但我检查
tmp.loc[(tmp['start']) < 0][['chargingstart','start']]
我明白了
chargingstart start
50053 1970-01-01 00:00:48+00 -3552.0
278149 1970-01-01 00:00:17+00 -3583.0
278150 1970-01-01 00:00:16+00 -3584.0
278152 1970-01-01 00:00:17+00 -3583.0
278153 1970-01-01 00:00:17+00 -3583.0
... ... ...
1590705 1970-01-01 00:00:00+00 -3600.0
1590978 1970-01-01 00:00:00+00 -3600.0
1591012 1970-01-01 00:00:00+00 -3600.0
1702854 1970-01-01 00:00:00+00 -3600.0
1772270 1970-01-01 00:00:00+00 -3600.0
我不知道为什么我会得到偏移量。有什么提示吗?
编辑:如果我分两步做同样的事情,它似乎有效。这是为什么?
tmp['convertToDtObject'] = tmp['chargingstart'].apply(lambda x: datetime.strptime(x[:19],"%Y-%m-%d %H:%M:%s"))
tmp['start'] = tmp['convertToDtObject'].apply(lambda x: x.timestamp())
tmp.loc[(tmp['start']) < 0][['chargingstart','convertToDtObject','start']]
解决方法
字符串采用 UTC 时区,您的格式字符串似乎不支持 tz。如果我使用以下内容,我会得到正确答案:
In [33]: from dateutil.parser import parse
In [34]: parse('1970-01-01 00:00:48+00')
Out[34]: datetime.datetime(1970,1,48,tzinfo=tzutc())
In [35]: parse(s).timestamp()
Out[35]: 48.0