使用apache camel/groovy将Kafka Avro Int转换为date

vtwuwzda  于 8个月前  发布在  Apache
关注(0)|答案(1)|浏览(85)

有Avro int date formate像

"name":"BirthDate","type":["null","int"],"default":null,"logicalType":"date"}

date逻辑类型注解Avro int,其中int存储从unix纪元1970年1月1日(ISO日历)开始的天数。

example: "BirthDate": -8364 or "BirthDate": 2320

如何使用Apache Camel或Groovy脚本转换或计算日期。

7uzetpgm

7uzetpgm1#

所以如果你只想计算日期,你只需要从纪元算起的毫秒数,你可以把它传递给Java中的任意数量的日期表示。如果你想让Avro把它作为一个日期,这是一个有点棘手的问题,这是一个非常Avro文档的问题。(我不是一个Maven)。但是,这里是如何创建几个不同的类型。我建议像这样为它添加一个getter:

class MyObject {

    int daysSinceEpoch

    ...

    long getMillisSinceEpoch() {
       TimeUnit.MILLISECONS.convert( daysSinceEpoch, TimeUnit.DAYS )
    }

    Date getDate() {
       new Date( millisSinceEpoch )

    LocalDate getLocalDate() {
        Instant.ofEpochMilli(millisSinceEpoch)
               .atZone(ZoneId.systemDefault()).toLocalDate()
    }

    Calendar getCalendar() {
        Calendar cal = Calendar.getInstance()
        cal.setTimeInMillis( millisSinceEpoch )
        return cal
    }
}

然后选择你想要的数据类型。

相关问题