如何在NiFi中将指定日期时间转换为24小时制格式
NiFi日期格式转换解决方案
针对你遇到的8/6/2023 12:46 am转2023-08-06 00:46:00的需求,用UpdateRecord处理器可以搞定,核心是正确匹配原日期的格式字符串,之前没成功大概率是格式参数写错了,具体操作如下:
关键表达式写法
假设待转换的字段名为original_time,目标字段可以是原字段(覆盖)或新字段(比如formatted_time),在UpdateRecord的「Record Path Value」属性中填入:
format(toDate(${original_time}, 'M/d/yyyy hh:mm a'), 'yyyy-MM-dd HH:mm:ss')
格式参数说明
- 原日期格式
M/d/yyyy hh:mm a:M:1-12的月份(对应原日期的8)d:1-31的日期(对应原日期的6)hh:12小时制的小时(对应原日期的12)a:匹配am/pm标识
- 目标格式
yyyy-MM-dd HH:mm:ss:yyyy:4位年份MM:补零的月份(转成08)dd:补零的日期(转成06)HH:24小时制的小时(12 am转成00)mm:ss:补零的分钟和秒(秒默认补00)
完整配置步骤
- 给UpdateRecord配置合适的Record Reader和Writer,比如你的数据是JSON格式,就选
JsonTreeReader和JsonRecordSetWriter,确保能正确解析和输出你的数据结构。 - 在UpdateRecord的属性列表里添加一条配置:
- 名称:填你要设置的目标字段名(比如
/formatted_time,如果是JSON路径;或者直接字段名,根据Reader的配置) - 值:填上面的表达式
- 名称:填你要设置的目标字段名(比如
- 用测试数据验证,比如生成一条包含
"original_time": "8/6/2023 12:46 am"的FlowFile,经过UpdateRecord后就能得到"formatted_time": "2023-08-06 00:46:00"的结果。
额外注意事项
如果你的数据涉及时区问题,可以在toDate函数里加第三个参数指定时区,比如:
format(toDate(${original_time}, 'M/d/yyyy hh:mm a', 'GMT+8'), 'yyyy-MM-dd HH:mm:ss')
内容的提问来源于stack exchange,提问作者janvit04
相关产品推荐
相关产品推荐

