Boto 3-松散的日期格式 [英] boto 3 - loosing date format
本文介绍了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屋!
查看全文