首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >avro模式时间戳格式

avro模式时间戳格式
EN

Stack Overflow用户
提问于 2021-11-10 16:05:02
回答 1查看 77关注 0票数 0

我希望获得这种格式的时间戳:MMDDYYYYHHMMSS

对于avro模式格式,我可以使用:

代码语言:javascript
复制
{
 "logicalType": "timestamp-millis"
 "type": "long",
 "date-format": "MMDDYYYYHHMMSS"
}

或者有更好的方法来做这件事?

EN

回答 1

Stack Overflow用户

发布于 2021-11-10 16:49:09

根据您的标签,看起来您使用的是fastavro。默认情况下,fastavro会将timestamp-millis解码为datetime对象。给定一个datetime对象,您可以使用strftime函数将其转换为所需的格式。

相反,如果您希望它自动解码为具有指定格式的字符串,则需要修补当前解码器以执行您想要的操作。下面是一个可以做到这一点的示例脚本:

代码语言:javascript
复制
import io
from datetime import datetime

import fastavro
from fastavro import writer, reader


original_decoder = fastavro.read.LOGICAL_READERS["long-timestamp-millis"]

def decode_as_custom_string(data, *args):
    dt = original_decoder(data, *args)
    return dt.strftime("%m%d%Y%H%M%S")

fastavro.read.LOGICAL_READERS["long-timestamp-millis"] = decode_as_custom_string


writer_schema = fastavro.parse_schema({
    "type": "record",
    "name": "root",
    "fields": [
        {
            "name": "some_date",
            "type": [
                "null",
                {
                    "type": "long",
                    "logicalType": "timestamp-millis",
                },
            ],
        },
    ]
})

records = [
    {"some_date": datetime.now()}
]

bio = io.BytesIO()

writer(bio, writer_schema, records)

bio.seek(0)

for record in reader(bio):
    print(record)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69916510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档