我希望获得这种格式的时间戳:MMDDYYYYHHMMSS
对于avro模式格式,我可以使用:
{
"logicalType": "timestamp-millis"
"type": "long",
"date-format": "MMDDYYYYHHMMSS"
}或者有更好的方法来做这件事?
发布于 2021-11-10 16:49:09
根据您的标签,看起来您使用的是fastavro。默认情况下,fastavro会将timestamp-millis解码为datetime对象。给定一个datetime对象,您可以使用strftime函数将其转换为所需的格式。
相反,如果您希望它自动解码为具有指定格式的字符串,则需要修补当前解码器以执行您想要的操作。下面是一个可以做到这一点的示例脚本:
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)https://stackoverflow.com/questions/69916510
复制相似问题