我想将时间(String)转换为unix时间戳,然后将其转换回可读的日期时间,但是,有7个小时不同。我的python代码有什么问题?
import datetime
#Convert a Datetime String to unix timestamp
def get_Timestamp_from_String(datetimeStr):
timestamp = int(datetime.datetime.strptime(datetimeStr, '%Y-%m-%d %H:%M:%S').timestamp())*1000
return timestamp
# Convert unix timestamp to DateTime
def get_Datetime_from_Timestamp(timestamp):
dt = pd.to_datetime(timestamp, unit='ms')
return dt
测试日期时间:" 2016-04-01 01:10:04"但是,如果我将其转换回来,那么我得到了结果:' 2016-04-01 08: 10:04',有7个小时的不同
timestamp = get_Timestamp_from_String("2016-04-01 01:10:04")
res = get_Datetime_from_Timestamp(timestamp)
print(res)
>>>Timestamp('2016-04-01 08:10:04')
我的代码中有什么问题?
答案 0 :(得分:3)
我认为您需要to_datetime
两次,因为ms除以10**6
:
datetimeStr = '2016-04-01 01:10:04'
timestamp = pd.to_datetime(datetimeStr).value //10**6
print (timestamp)
1459473004000
dt = pd.to_datetime(timestamp, unit='ms')
print (dt)
2016-04-01 01:10:04
对于ns
,无需numpy
分割中的时间戳的原生格式:
datetimeStr = '2016-04-01 01:10:04'
timestamp = pd.to_datetime(datetimeStr).value
print (timestamp)
1459473004000000000
dt = pd.to_datetime(timestamp, unit='ns')
print (dt)
2016-04-01 01:10:04
但如果有时区信息:
datetimeStr = '2016-04-01 01:10:04-07:00'
timestamp = pd.to_datetime(datetimeStr).value //10**6
print (timestamp)
1459498204000
dt = pd.to_datetime(timestamp, unit='ms')
print (dt)
2016-04-01 08:10:04