由python pandas转换的Unix时间戳

时间:2017-09-13 11:51:08

标签: python pandas

我想将时间(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')

我的代码中有什么问题?

1 个答案:

答案 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