Boto 3-松散的日期格式 [英] boto 3 - loosing date format

查看:33
本文介绍了Boto 3-松散的日期格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用boto3读取镶木地板文件。原始文件的日期格式如下:

2016-12-07 23:00:00.000

并且它们存储为时间戳。

我在Sage Maker中的代码是:

boto_s3 = boto3.client('s3') 
r = boto_s3.select_object_content(
        Bucket='bucket_name',
        Key='path/file.gz.parquet',
        ExpressionType='SQL',
        Expression=f"select fecha_instalacion,pais from s3object s ",
        InputSerialization = {'Parquet': {}},
        OutputSerialization = {'CSV': {}},
)


rl0 = list(r['Payload'])[0]

from io import StringIO
string_csv = rl0['Records']['Payload'].decode('ISO-8859-1')
csv = StringIO(string_csv)
pd.read_csv(csv, names=['fecha_instalacion',  'pais'])

但不是我得到的日期:

fecha_instalacion  pais
45352962065516692798029824  ESPAÃA

我查找的日期中间只有一天,相同的数字位数是前6位。例如:

45337153205849123712294912-->   2016-12-09 23:00:00.000
45337116312360976293191680-->   2016-12-07 23:00:00.000

我需要获取正确的格式化日期,并避免特殊字符。

谢谢。

推荐答案

问题出在格式。该拼图文件使用Int96数字表示时间戳。

以下是将int96Timestamp转换为python日期时间的函数

import datetime

def dateFromInt96Timestamp(int96Timestamp):
    julianCalendarDays = int96Timestamp >> 8*8
    time = int((int96Timestamp & 0xFFFFFFFFFFFFFFFF) / 1_000)
    linuxEpoch = 2_440_588
    return datetime.datetime(1970, 1, 1) + datetime.timedelta(days=julianCalendarDays - linuxEpoch, microseconds=time)  

这篇关于Boto 3-松散的日期格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆