在使用轻联搭建流程的过程中,经常遇到上下游接口出入参中的日期时间格式不一致的情况。
为减少用户转换成本,轻联会根据您的输入或者您选择的变量,甚至根据您设置的表达式、代码的运行结果,自动识别出源格式(输入格式),并转换为ISO 8601标准日期时间格式。
轻联系统日期间的传输规范按照国际标准ISO 8601《数据元和交换格式 信息交换 日期和时间表示法》。
由于ISO 8601对于日期时间的表示也有多种形式,如YYYY-MM-DD或者YYYYMMDD均可。因此轻联需要统一一套标准日期时间格式,如下:
类型 | 标识符 | 使用 2022 年 12 月 31 日的示例 |
日期 | YYYY-MM-DD | 2022-12-31 |
时间 | HH:mm:SS | 23:59:59(默认为东八区,北京时间) |
日期时间 | YYYY-MM-DD HH:mm:SS | 2022-12-31 23:59:59(默认为东八区,北京时间) |
虽然轻联定义了以上标准,但在实际用户搭建流程时,并无法保证传入标准的日期时间格式,因此需要使用日期时间转换工具,甚至通过编码进行转换,降低了流程搭建效率。
日期
源数据 | 识别格式 | 备注 |
2022-12-31 | YYYY-MM-DD | 使用短横线分隔的年月日 |
2022/12/31 | YYYY/MM/DD | 使用左斜线分隔的年月日 |
2022年12月31日 | YYYY年MM月DD日 | 使用汉字分隔的年月日 |
2022.12.31 | YYYY.MM.DD | 使用英文点分隔的年月日 |
时间
源数据 | 识别格式 | 备注 |
23:59:59 | hhⓂss | 使用英文冒号分隔的时分秒 |
23:59:59+08:00 | hh:mm:ss+hh:mm | 带有加减号表示时区 如果时区不是东八区,则自动转换为东八区时间 |
23点(时)23分59秒 | 使用汉字分隔的年月日 | |
23:59:59Z | hh:mm:ssZ | 带有大写Z或小写z表示0时区 由于时区不是东八区,自动转换为东八区时间 |
23:59:59z | hh:mm:ssz | 带有大写Z或小写z表示0时区 由于时区不是东八区,自动转换为东八区时间 |
日期时间(以上两种日期、时间格式任意组合,仅分隔符区分)
源数据 | 识别格式 | 备注 |
2022-12-31 23:59:59 | YYYY-MM-DD hh:mm:ss | 使用单个空格分隔符 |
2022-12-31T23:59:59 | YYYY-MM-DDThh:mm:ss | 带有大写T分隔符 |
2022-12-31t23:59:59 | YYYY-MM-DDthh:mm:ss | 带有小写t分隔符 |
1672502399 | ts | 时间戳秒 十位数字,从指格林威治时间(0时区)的1970年01月01日00时00分00秒起到指定时间的总秒数,转换时需要根据时区时间 |
以上日期时间格式,不需要用户选择,系统会自动识别,并转换为轻联标准格式。
除了上面可自动转换的格式以外,仍然具有一些常用的格式,系统无法识别,或者在自动识别时可能具有歧义,因此需要用户指定所选的格式:
日期
源数据 | 识别格式 | 备注 |
20221231 | YYYYMMDD | 不使用分隔符的年月日 |
12/31/2022 | MM/DD/YYYY | 月份和日期在前,且用左斜线分隔的年月日(美国常用) |
31/12/2022 | DD/MM/YYYY | 日期和月份在前,且用左斜线分隔的年月日(欧洲常用) |
31.12.2022 | DD.MM.YYYY | 日期和月份在前,且用英文点分隔的年月日(欧洲常用) |
31-12-2022 | DD-MM-YYYY | 日期和月份在前,且用短横线分隔的年月日(欧洲常用) |
Dec 31,2022 | MMM DD,YYYY | MMM表示英文月份名称标识月份 如:Jan、Feb、Mar、Apr 、May、Jun、Jul、Aug、Sept、Oct、Nov、Dec() |
31 Dec 2022 | DD MMM YYYY |
时间
源数据 | 识别格式 | 备注 |
235959 | hhmmss | 不使用分隔符的完整时间 |
235959+0800 | hhmmss+hhmm | 带有加减号表示时区 |
T23:59:59+08:00 | Thh:mm:ss+hh:mm | 带有大写T或小写t表示时间开始标识 |
t23:59:59+08:00 | thh:mm:ss+hh:mm | 带有大写T或小写t表示时间开始标识 |
T23:59:59Z | Thh:mm:ssZ | 表示0时区的时间 |
115959 PM | hhmmss PM | 使用AM/PM 指示符表示上午或者下午,需要自动加上12小时 |
11:59:59 P | hh:mm:ss P | 使用A/P 指示符表示上午或者下午,需要自动加上12小时 |
日期时间(以上两种日期、时间格式任意组合,仅分隔符区分) |
源数据 | 识别格式 | 备注 |
20221231235959 | YYYYMMDDhhmmss | 不使用分隔符的完整时间 |
31420800 | ts | 非十位的秒级时间戳,如8位数字的 31420800 表示1970年12月31日 00时00分00秒; |
1672502399999 | ts | 毫秒级时间戳,如11位数字的 31420800000 表示1970年12月31日 00时00分00秒; |
当遇到其他日期时间格式时,用户可使用函数或者表达式将源格式转换为YYYY-MM-DD HH:mm:SS,或者轻联可自动识别的任意格式。
由于在ISO 8601标准时间格式中存在时区概念,处理逻辑如下:
1)如果源格式中没有时区,则统一按照东八区进行处理
例如:2022-12-31 23:59:59 直接转换为2022-12-31 23:59:59
2)如果源格式中含有时区,则转换为东八区进行处理
例如:2022-12-31 23:59:59Z 直接转换为2023-01-01 07:59:59
逻辑同时区处理,当下转换为 东八区的时间
例如:1672502399,转换为:2022-12-31 23:59:59+08:00 简写为: 2023-01-01 10:59:59
1)转换失败时,系统进行报错:
错误内容:日期格式参数在进行格式转换时发生错误;
2)输入为空时,或变量为空值时,不会进行转换处理。