github.com/GuanceCloud/cliutils@v1.1.21/pipeline/ptinput/funcs/md/adjust_timezone.md (about) 1 ### `adjust_timezone()` {#fn-adjust-timezone} 2 3 函数原型:`fn adjust_timezone(key: int, minute: int)` 4 5 函数参数 6 7 - `key`: 纳秒时间戳,如 `default_time(time)` 函数处理后得到的时间戳 8 - `minute`: 返回值允许超出当前时间的分钟数(整数),取值范围 [0, 15], 默认值为 2 分钟 9 10 函数说明:使得传入的时间戳减去函数执行时刻的时间戳的差值在(-60+minute, minute] 分钟内;不适用于时间差超出此范围的数据,否则将导致获取到错误的数据。计算流程: 11 12 1. 为 key 的值加上数小时使其处于当前小时内 13 2. 此时计算两者分钟差,两者分钟数值范围为 [0, 60),差值范围在 (-60,0] 和 [0, 60) 14 3. 差值小于等于 -60 + minute 的加 1 小时,大于 minute 的减 1 小时 15 4. minute 默认值为 2,则差的范围允许在 (-58, 2],若此时为 11:10,日志时间为 3:12:00.001,最终结果为 10:12:00.001;若此时为 11:59:1.000, 日志时间为 3:01:1.000,最终结果为 12:01:1.000 16 17 示例: 18 19 ```json 20 # 输入 1 21 { 22 "time":"11 Jul 2022 12:49:20.937", 23 "second":2, 24 "third":"abc", 25 "forth":true 26 } 27 ``` 28 29 脚本: 30 31 ```python 32 json(_, time) # 提取 time 字段 (若容器中时区 UTC+0000) 33 default_time(time) # 将提取到的 time 字段转换成时间戳 34 # (对无时区数据使用本地时区 UTC+0800/UTC+0900..。解析) 35 adjust_timezone(time) 36 # 自动(重新)选择时区,校准时间偏差 37 ``` 38 39 执行 `datakit pipeline -P <name>.p -F <input_file_name> --date`: 40 41 ```json 42 # 输出 1 43 { 44 "message": "{\n \"time\":\"11 Jul 2022 12:49:20.937\",\n \"second\":2,\n \"third\":\"abc\",\n \"forth\":true\n}", 45 "status": "unknown", 46 "time": "2022-07-11T20:49:20.937+08:00" 47 } 48 ``` 49 50 本机时间:`2022-07-11T20:55:10.521+08:00` 51 52 仅使用 `default_time` 按照默认本机时区(UTC+8)解析得到的时间分别为: 53 54 - 输入 1 结果: `2022-07-11T12:49:20.937+08:00` 55 56 使用 `adjust_timezone` 后将得到: 57 58 - 输入 1 结果: `2022-07-11T20:49:20.937+08:00`