JSONata日期时间函数详解:从基础到高级应用

JSONata日期时间函数详解:从基础到高级应用

jsonata JSONata query and transformation language - http://jsonata.org jsonata 项目地址: https://gitcode.com/gh_mirrors/js/jsonata

前言

在数据处理和转换过程中,日期和时间的处理是非常常见的需求。JSONata作为一款强大的JSON数据转换语言,提供了一系列实用的日期时间处理函数。本文将全面介绍JSONata中的日期时间函数,帮助开发者掌握这些核心功能。

基础时间获取函数

$now() 函数

$now()函数用于获取当前的UTC时间戳,返回ISO 8601格式的字符串。这个函数的特点是:在同一个表达式求值过程中多次调用时,返回的时间戳值保持不变。

基本用法:

$now()

返回示例:"2023-07-20T08:30:45.123Z"

高级用法: 可以配合格式字符串和时区参数使用:

$now('[Y0001]-[M01]-[D01] [H01]:[m01]:[s01]', '+0800')

这会返回类似"2023-07-20 16:30:45"的格式(北京时间)

$millis() 函数

$millis()返回自Unix纪元(1970年1月1日UTC)以来的毫秒数,作为一个数字值。与$now()类似,同一表达式求值过程中多次调用返回相同值。

示例:

$millis()

可能返回:1689844245123

时间转换函数

$fromMillis() 函数

$fromMillis()是将毫秒数转换为格式化日期字符串的核心函数。

基本语法:

$fromMillis(milliseconds [, picture [, timezone]])

参数说明:

  1. milliseconds: 必填,Unix时间戳毫秒数
  2. picture: 可选,格式化字符串
  3. timezone: 可选,时区偏移量,格式为"±HHMM"

使用场景:

  1. 简单转换(ISO格式):
$fromMillis(1510067557121)

返回:"2017-11-07T15:12:37.121Z"

  1. 自定义格式:
$fromMillis(1510067557121, '[M01]/[D01]/[Y0001] [h#1]:[m01][P]')

返回:"11/07/2017 3:12pm"

  1. 带时区转换:
$fromMillis(1510067557121, '[H01]:[m01]:[s01] [z]', '-0500')

返回:"10:12:37 GMT-05:00"

格式化字符串语法: 格式化字符串使用方括号包围的组件构成,常见组件包括:

  • [Y0001]: 4位年份
  • [M01]: 2位月份
  • [D01]: 2位日期
  • [H01]: 24小时制小时
  • [h#1]: 12小时制小时
  • [m01]: 分钟
  • [s01]: 秒
  • [f001]: 毫秒
  • [P]: AM/PM标记

$toMillis() 函数

$toMillis()$fromMillis()的逆操作,将日期字符串转换为毫秒时间戳。

基本语法:

$toMillis(timestamp [, picture])

使用示例:

  1. 解析ISO格式:
$toMillis("2017-11-07T15:07:54.972Z")

返回:1510067274972

  1. 解析自定义格式:
$toMillis("11/07/2017 3:07pm", '[M01]/[D01]/[Y0001] [h#1]:[m01][P]')

实际应用场景

  1. 日志时间格式化:
{
  "rawTimestamp": log.timestamp,
  "formatted": $fromMillis(log.timestamp, '[Y]-[M01]-[D01] [H01]:[m01]')
}
  1. 时区转换:
$fromMillis(event.time, '[H01]:[m01]', '+0800')
  1. 日期计算:
$fromMillis($toMillis("2023-01-01") + 86400000)  // 加1天
  1. 多格式支持:
$toMillis(dateString, 
  dateString ~> /^\d{4}-\d{2}-\d{2}$/ ? '[Y0001]-[M01]-[D01]' : 
  dateString ~> /^\d{2}\/\d{2}\/\d{4}$/ ? '[M01]/[D01]/[Y0001]' : 
  '[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]Z'
)

注意事项

  1. 时区处理要特别注意,默认情况下使用UTC时区
  2. 格式化字符串区分大小写,如[M01]表示月份,[m01]表示分钟
  3. 日期解析时,格式必须严格匹配,否则会抛出错误
  4. 性能考虑:频繁的时间转换操作可能会影响性能

总结

JSONata的日期时间函数提供了强大而灵活的时间处理能力,从简单的时间戳获取到复杂的格式转换都能轻松应对。掌握这些函数可以大大提升处理时间相关数据的效率,特别是在数据转换和报表生成等场景中。通过合理组合这些函数,可以实现几乎任何时间格式的输入输出需求。

jsonata JSONata query and transformation language - http://jsonata.org jsonata 项目地址: https://gitcode.com/gh_mirrors/js/jsonata

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

田子蜜Robust

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值