如何在Logstash中从当前日期减去指定年日月计算得到历史日期?
Logstash Ruby Filter 日期偏移负值问题解决方案
问题原因
原有实现直接对年、月、日字段单独做减法,未处理日期跨月、跨年、大小月、闰年等边界场景的自动进位逻辑,因此会出现月份、日期为负值的问题。
解决方案
直接使用Ruby Date 类内置的日期偏移方法即可自动处理所有边界场景,无需手动拆分字段计算,修正后的配置如下:
ruby { code => ' # 自定义要减去的年月日数值 subtract_years = 25 subtract_months = 10 subtract_days = 10 # 获取当前UTC日期对象 current_date = Time.now.utc.to_date # 链式调用内置偏移方法,自动处理所有日期边界逻辑 target_date = current_date.prev_year(subtract_years) .prev_month(subtract_months) .prev_day(subtract_days) # 格式化输出为标准时间格式,自动补全前导零 event.set("[deleteTillDate]", target_date.strftime("%Y-%m-%d 00:00:00.000")) ' }
方案说明
- 内置
prev_year(n)、prev_month(n)、prev_day(n)方法会自动处理闰年、大小月、跨年跨月的进位逻辑,不会出现负值问题 - 使用
strftime方法格式化输出,避免手动拼接字符串时出现月份/日期为个位数时缺少前导零的格式问题 - 你可以根据需求调整偏移的执行顺序,内置方法均会正确计算结果
内容的提问来源于stack exchange,提问作者Priyanka W
相关产品推荐
相关产品推荐

