You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java LocalDateTime与Avro映射方法及类型定义疑问

Java LocalDateTime 映射到 Avro 的问题解答

1. 你的Avro定义是否正确?

不正确。timestamp-millis逻辑类型要求底层必须是long类型,你当前使用int类型会引发时间戳溢出问题——int的最大值为2147483647(对应2038年1月19日),超过这个时间的毫秒级时间戳将无法被正确存储。

正确的Avro字段定义如下:

{
  "name": "example",
  "type": ["null", {"type": "long", "logicalType": "timestamp-millis"}],
  "default": null
}

2. 如何在Avro对象中设置值?

你当前的转换逻辑是正确的:将LocalDateTime转换为UTC时区的Instant后获取毫秒级时间戳。只需确保将得到的long类型时间戳赋值给对应Avro字段即可。

示例代码(假设生成的Avro类名为YourAvroClass):

LocalDateTime localDateTime = LocalDateTime.now();
long epochMillis = localDateTime.toInstant(ZoneOffset.UTC).toEpochMilli();

YourAvroClass avroObj = YourAvroClass.newBuilder()
    .setExample(epochMillis)
    .build();

3. Avro是否应该定义为Long类型?

是的。timestamp-millis逻辑类型的官方规范明确要求底层类型为long,用于存储从1970-01-01T00:00:00Z开始的毫秒数。使用int会存在范围限制,无法处理2038年之后的时间,因此必须使用long类型。

内容的提问来源于stack exchange,提问作者user1555190

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 14:01:18