SQL Bigint到int64到时间戳产生错误的日​​期

时间:2017-10-27 19:07:02

标签: python

我正在编写一个输出csv的脚本,需要以YYYYMMDD格式将执行时间作为文件名的一部分。 execution_timestamp是通过JDBC引出的,最后是我的DataFrame as int64。

    import pandas as pd
    from dateutil import parser

输入:

    x = pd.DataFrame([1493293503289], columns=['EXECUTION_TIMESTAMP'])
    ts= x['EXECUTION_TIMESTAMP']
    ts

输出:

    0    1493293503289
    Name: EXECUTION_TIMESTAMP, dtype: int64

我编写了以下代码,我将其转换为pandas DataFrame - >时间戳 - >解析YYYYMMDD

输入:

    df=pd.DataFrame(ts) # create pd data frame 
    ts_conv = pd.to_datetime(df['EXECUTION_TIMESTAMP'], unit='ns')[0]
    parser.parse(str(ts_conv)).strftime('%Y%m%d') 

输出:

    '19700101'

ts_conv = Timestamp('1970-01-01 00:24:53.293503289')

我知道实际执行时间是'2017-04-27-11.45.03' 我非常感谢将此转换为适当日期的任何建议。

1 个答案:

答案 0 :(得分:1)

根据@gseva设置unit='ms'的建议,解析提供了正确的YYYYMMDD字符串。单位是纳秒而不是毫秒。

输入:

    ts_conv = pd.to_datetime(df['EXECUTION_TIMESTAMP'], unit='ms')[0]
    parser.parse(str(ts_conv)).strftime('%Y%m%d') 

输出:

    '20170427'