日期时间函数
日期时间函数对日期和时间值执行操作或计算。使用日期时间函数可增加或减去时间间隔、查找当前日期、查找月的第一天或最后一天、提取日期时间值的某个部分或将值转换为其他格式。
日期支持
Designer 无法处理 1400 年 1 月 1 日之前的日期。
Alteryx 使用 ISO 格式 yyyy-mm-dd HH:MM:SS 表示日期和时间。要获得更高的精度(最多18位精度),请在秒数位置后添加一个句点和其他数字。例如,
yyyy-mm-dd HH:MM:SS.5
。如果一个日期时间值不是这种格式,Alteryx 则将其读取为字符串。要将列转换成日期时间格式,可使用表达式编辑器中的 DateTimeParse 函数或
日期时间工具
进行。
某些日期时间函数要求您设置日期的格式。格式字符串由说明符和分隔符组成。
日期-时间单位的关键字
这些关键字与 DateTimeAdd,DateTimeDiff 和 DateTimeTrim 函数兼容。关键字不区分大小写。每个单元接受的关键字均以逗号分隔。
在某些情况下,我们接受缩写,但最多不超过完整的关键词。 在下面的列表中以
直至
指定这些缩写,范围从可接受的最短缩写到完整关键字。例如,对于 seconds(秒),我们接受
sec
和
seconds
,以及中间的任何东西,如
seco
。请注意,关键词为英文,不支持翻译成其他语言。
您也可以使用数字值作为子秒时间的关键字。这包括以下列表中未明确标注的商品。例如,您可以使用关键字"10"来指示10位精度。
yea 直至 years
mon 直至 months
day, days
hou 直至 hours
min 直至 minutes
sec 直至 seconds
ds, dsec, dsecs, deciseconds, 1.
cs, csec, csecs, centiseconds, 2
ms, msec, msecs, milliseconds, 3
us, usec, usecs, microseconds, 6
ns, nsec, nsecs, nanoseconds, 9
ps, psec, psecs, picoseconds, 12
fs, fsec, fsecs, femtoseconds, 15
as, asec, asecs, attoseconds, 18
有关以各种精度单位表示的日期时间字段大小的一些示例,请参阅下表:
名称 | 缩写 | 日期时间大小 | 示例 |
---|---|---|---|
秒 |
| 19(默认) | 2023-02-24 01:23:45 |
分秒 (1) |
| 21 (19 + 1 + 1) | 2023-02-24 01:23:45.1 |
厘秒 (2) |
| 22 (19 + 1 + 2) | 2023-02-24 01:23:45.12 |
毫秒 (3) |
| 23 (19 + 1 + 3) | 2023-02-24 01:23:45.123 |
微秒 (6) |
| 26 (19 + 1 + 6) | 2023-02-24 01:23:45.123456 |
纳秒 (9) |
| 29 (19 + 1 + 9) | 2023-02-24 01:23:45.123456789 |
皮秒 (12) |
| 32 (19 + 1 + 12) | 2023-02-24 01:23:45.123456789012 |
飞秒 (15) |
| 35 (19 + 1 + 15) | 2023-02-24 01:23:45.123456789012345 |
阿秒 (18) |
| 38 (19 + 1 + 18) | 2023-02-24 01:23:45.123456789012345678 |
说明符
说明符总是以百分比符号 (%)开头,后跟一个区分大小写的字母。数据必须至少包含两位数的年。
说明符 | DateTimeFormat 的输出 | DateTimeParse 支持的输入 |
---|---|---|
| 子秒的精度位数。 | 高达18位精度,以次秒为单位。 |
| 星期的缩写 ("Mon") | 一周内任何一天的有效缩写 ("mon", "Tues.", "Thur")。只有当给定的文本不是一周内的某一天时才返回一个错误。请注意,Alteryx 不查证所指的周内的某一天是否与相应的日期相吻合。 |
| 完整的工作日名称 ("Monday") | 星期几名称或星期几的任何有效缩写 ("mon", "Tues.", "Thur")。只有当给定的文本不是一周内的某一天时才返回一个错误。请注意,Alteryx 不查证所指的周内的某一天是否与相应的日期相吻合。 |
| 缩写的月份名称 ("Sep") | 月份名称的任何有效缩写 ("Sep", "SEPT.")。仅当给定文本不是月份名称时才返回错误。 |
| 完整的月分名称 ("September") | 月份名称或月份名称的任何有效缩写 ("Sep", "SEPT.")。仅当给定文本不是月份名称时才返回错误。 |
| 计算机区域设置的日期和时间。 | 不支持 |
| 世纪数字 ("20") | 不支持 |
| 月份中的日期 ("01") | 1 位或 2 位数字,忽略空格(“1”或“01”)。 |
| 相当于 %m/%d/%y | 不支持 |
| 月份中的日期,第一个 0 替换为空格 (" 1")。 | 1 位或 2 位数字,忽略空格(“1”或“01”)。 |
| 与 %b ("Sep") 相同 | 月份名称的任何有效缩写 ("Sep", "SEPT.")。仅当给定文本不是月份名称时才返回错误。 |
| 以 24 小时制表示的小时,00 - 23。 | 小时最多为 2 位数字,0 - 23。与 %p 或 %P 不兼容。 |
| 12 小时制的小时,01 - 12。 | 小时最多为 2 位数字,1 - 12。必须后跟 %p 或 %P。 |
| 一年中的日期,001 - 365(闰年为 366) | 一年中的 3 位数字的日期,001 - 365(闰年为 366) |
| 24 小时,第一个 0 是空格," 0" - "23"。 | 小时最多为 2 位数字。 |
| 12 小时,第一个 0 是空格," 1" - "12"。 | 不支持 |
| 分钟,00 - 59 | 分钟最多为 2 位数字。 |
| 月份数字,01 - 12。 | 1 位或 2 位数字的月份,1 或 01 - 12。 |
| "AM"或"PM" | 不区分大小写("aM"或"Pm")。必须接在 %I 后面(请注意这是大写字母“I”,12 小时制的小时)。 |
| "am"或"pm" | 不区分大小写("aM"或"Pm")。必须接在 %I 后面(请注意这是大写字母“I”,12 小时制的小时)。 |
| 秒,00 - 59 | 秒最多为 2 位数字。 |
| 24 小时制中的时间。等同于 %H:%M:%S | 不支持 |
| 小数形式表示的星期几,1-7,星期一为 1。 | 不支持 |
| 返回以数字表示的周,即 00 - 53,周从星期日开始。 | 不支持 |
| 数字表示的星期,0 - 6,星期日为 0。 | 不支持 |
| 返回以数字表示的周,即 00 - 53,周从星期一开始。 | 不支持 |
| 计算机区域设置的日期。 | 不支持 |
| 12 小时制时间,包含 AM 或 PM (“11:51:02 AM”)。 | Hours:Minutes:Seconds [AM / PM] |
| 年的最后两位数字 ("16")。 | 最多读取 4 位数字,在分隔符或字符串末尾停止,并映射到当前年份减 66 到当前年份加 33 的范围。例如,就 2016 年而言, 这个范围在 1950 到 2049 年之间。 六位数字日期的局限 由于年份最多可读取 4 位数,当读取只由 2 位数字代表年且没有分隔符的格式,比方 6 位数字的日期戳(如 %y%m%d 代表类似 170522 的数据,即 May 22, 2017),仍以 4 个数字进行读取。要解决此问题,您可以:
|
| 四位数字的年 ("2016")。 | 读取 2 位或 4 位数字。2 位数字映射到当前年份减 66 到当前年份加 33 的范围。例如,就 2016 年而言, 这个范围在 1950 到 2049 年之间。 |
| UTC 时差 ("-600") | 不支持 |
| 完整时区名称 ("山区夏令时")。 | 不支持 |
分隔符
在日期时间说明符之间插入分隔符以形成格式字符串。
分隔符 | DateTimeFormat 的输出 | DateTimeParse 支持的输入* |
---|---|---|
| / | / 或 - |
| - | / 或 - |
空格 | 空格键 | 任何空格字符序列。 |
| 换行 | 不支持 |
| Tab 键 | 不支持 |
其他 | 其他字符,如逗号、句点和冒号。 | 其他字符,如逗号、句点和冒号。 |
*DateTimeParse 接受向前斜杠 ( / ) 和连字符 ( - ) 的互换使用。但是,逗号、冒号和所有其他分隔符必须与传入数据完全匹配。
语言参数
这些是 DateTimeFormat 和 DateTimeParse 函数支持的 "l"(语言)参数的兼容值。
英语名称 | 母语名称 | 语言代码 |
---|---|---|
英语 | 英语 | en |
意大利语 | Italiano | it |
法语 | Français | fr |
德语 | Deutsch | de |
日语 | 日本語 | ja |
西班牙语 | Español | es |
葡萄牙语 | Português | pt |
简体中文 | 简体中文 | zh |
除了上述值之外,亦接受长度至少为 2 个字符且以上述任意字符开头的值。例如,eng、engl、engli 等表示英语,或者 esp、espa、sp、spa、span 等表示西班牙语/Español。
日期时间函数
请参阅下面的 DateTime 函数。
DateTimeAdd
DateTimeAdd(dt,i,u)
:: 将一个具体时间间隔添加到日期时间值中。
参数
dt
:日期时间数据,由所选列或带引号的指定日期时间值表示。
i
: 时间正数或负整数,用于进行加减。
u
:日期时间单位,使用
日期时间单位的关键字
部分中列出的关键字在引号之间指定。
示例
DateTimeAdd(DateTimeToday(), -1, "days")
返回昨天的日期。
DateTimeAdd(DateTimeFirstOfMonth(), 1, "months")
返回下个月的第一天的日期时间。
DateTimeAdd("2016-01-30", 1, "month")
返回 2016-02-29(因为 2 月没有 30 号,但 29 号是该年 2 月份的最后一天)。
DateTimeAdd("2016-03-30", -1, "month")
返回 2016-02-29(因为 2 月没有 30 号,但 29 号是该年 2 月份的最后一天)。
DateTimeAdd("2016-03-30 01:02:03.000000", 495, "microseconds")
返回 2016-03-30 01:02:03.000495。
阅读更多
表示时间段的任何小数都将被截断。例如,您不能加 “1.5 小时”。但可以加 “90 分钟”。
添加单位不会改变比其小的单位的值。例如,添加小时不会更改分钟或秒的值。添加月不会更改日期或时间,除非生成的月份不存在该天。在这种情况下,系统将用该月的最后一天。
DateTimeDay
DateTimeDay(dt)
:返回日期时间值中的月日数值。
参数
dt
:日期时间数据,由所选列或带引号的指定日期时间值表示。
示例
DateTimeDay("2017-03-24 11:43:23")
返回 24。
DateTimeDiff
DateTimeDiff(dt1,dt2,u)
:第一个参数减去第二个参数,并返回它们之间的整数差值。时间间隔以指定时间单位为单位返回一个数字,而不是返回字符串。
参数
dt
:日期时间数据,由所选列或带引号的指定日期时间值表示。
u
:日期时间单位,使用
日期时间单位的关键字
部分中的关键字在引号之间指定。
示例
DateTimeDiff("2016-02-15 00:00:00", "2016-01-15 00:00:01", "Months")
返回 1(因为开始日期和结束日期是月中的同一天)。
DateTimeDiff("2012-02-29","2011-03-01","years")
返回 0(尽管 2011-03-01 经过 365 天后是 2012-02-29,但 2 月 29 日在 3 月 1 日之前,因此还不够“一年”)。
DateTimeDiff("2016-02-14", "2016-01-15", "Months")
返回 0(因为 2 月的天数少于 1 月的天数)。
DateTimeDiff("2016-02-14 23:59:59", "2016-01-15 00:00:00", "Months")
返回 0(即使只差一秒钟的时间就能达到要求的日期)。
DateTimeDiff('2017-02-28', '2016-02-29', 'Months')
返回 11(即使 28 号是 2017 年 2 月份的最后一天,但 28 天仍少于 29 天)。
DateTimeDiff('2017-02-28 00:59:59.28139502', '2017-02-28 00:59:59.12383125', 'msecs')
返回157 (表示日期-时间值之间的毫秒)。
阅读更多
对于月和年的时间差,仅当结束日期与开始日期之间相距一个整月时,才会被计算成一个月(当天时间将被忽略)。
天、小时、分钟和秒的结果经过精准计算,小数部分将被截断,但不是进行四舍五入。因此...
DateTimeDiff(‘2016-01-01 00:59:59’, ‘2016-01-01 00:00:00’, ‘Hours’)
的结果为 0。DateTimeDiff(‘2016-01-01 23:59:59’, ‘2016-01-01 00:00:00’, ‘Days’)
的结果为 0。
单位名称可以缩短为前三个字符(如 'sec' 和 'min');不区分大小写。
以秒为单位存储时间差时要格外注意。以秒为单位时,Int32 只能支持长达 68 年的时间差,以分钟为单位则可支持长达 4082 年的时间差。您可以使用 Double 或 Int64 来保留所有支持日期之间的时间间隔。
DateTimeFirstOfMonth
DateTimeFirstOfMonth()
:返回每月的第一天(午夜时间)。
DateTimeFormat
DateTimeFormat(dt,f,l)
:以指定语言 (l),将日期时间数据从 ISO 格式转换为其他指定格式 (f),以用于其它应用。输出为字符串数据类型。如果指定格式的精度较低,则输出会被截断。
参数
dt
:日期时间数据,由所选列或带引号的指定日期时间值表示。
f
:转换数据的格式,以格式字符串表示。
l
:可选语言参数。语言参数默认为选定的 Designer 语言。例如,如果将 Designer 设置为法语,则默认以
DateTimeParse(dt,f,"Français")
取读。有关接受的语言值,请参阅
语言参数
。
示例
DateTimeFormat([DateTime_Out],"%d-%m-%Y")
返回 22-04-2008(日期值为 April 22, 2008,ISO 格式为 2008-04-22)。
DateTimeFormat([DateTime_Out],"%A","Spanish")
返回 "martes" ( ISO日期为2020-07-14,7月14日为星期二)。
DateTimeFormat('11:59:57.890994389','%H:%M:%S.%5')
返回"11:59:57.89099"(根据指定的数字截断到5位精度)。
DateTimeFormat('11:59:57.99','%H:%M:%S,%3')
返回"11:59:57,990"(可以获得您所在语言环境的小数分隔符。此示例使用逗号而不是小数点)。
DateTimeHour
DateTimeHour(dt)
:返回日期时间值中小时部分的值。
参数
dt
:日期时间数据,由所选列或带引号的指定日期时间值表示。
示例
DateTimeHour("2017-03-24 11:43:23")
返回 11。
DateTimeHour("2017-03-24")
返回 0,因为日期没有指定小时,默认小时为午夜时间。
DateTimeLastOfMonth
DateTimeLastOfMonth()
:返回当月的最后一天,时钟设置为一天结束前一秒的时间 (23:59:59)。
Designer 使用首次解析公式时的日期和时间。在批处理过程中,此时间用于每组新数据。这可保持在处理需要很长时间情况下时间的一致性。
DateTimeMinutes
DateTimeMinutes(dt)
:返回日期时间值中分钟部分的值。
参数
dt
: 日期时间数据,由所选列或带引号的日期时间值表示。
示例
DateTimeMinutes("2017-03-24 11:43:23")
返回 43。
DateTimeMonth
DateTimeMonth(dt)
返回日期时间值中月份的数字值。
参数
dt
:日期时间数据,由所选列或带引号的指定日期时间值表示。
示例
DateTimeMonth("2017-03-24 11:43:23")
返回 3。
DateTimeMonth("11:43:23")
返回 [Null],因为传入数据无效。
当前日期时间
DateTimeNow()
:返回当前系统日期和时间,具体到秒。
DateTimeNowPrecise
DateTimeNowPrecise()
:返回当前系统日期和时间,具体到秒后的小数,最多支持 18 位精度。请注意,如果您请求的精度超出操作系统提供的精度,则该函数会在剩余部分填入 0,例如下面的第二个示例。
示例
DateTimeNowPrecise(3)
返回 '2022-10-14 11:59:57.991'。
DateTimeNowPrecise(12)
返回 '2022-10-14 11:59:57.991238400000'。
DateTimeParse
DateTimeParse(string,f,l)
:将指定格式 (f) 和指定语言 (l) 的日期字符串转换为标准 ISO 格式(yyyy-mm-dd HH:MM:SS,如果适用,还可以满足可选的日期时间精度要求)。如果指定格式的精度较低,则输出会被截断。
参数
dt
:日期时间字符串数据,由所选字段或带引号的日期时间字符串表示。传入数据必须是字符串数据类型,并且可以是日期时间的任何格式,只要此格式与您为 f 参数指定的格式一致即可。
f
:要转换的传入日期字符串数据的格式,由带引号的格式字符串表示。
l
:(可选)要转换的传入日期字符串数据的语言。语言参数默认为选定的 Designer 语言。例如,如果将 Designer 设置为法语,则默认以
DateTimeParse(string,f,"Français")
取读。有关接受的语言值,请参阅
语言参数
。
示例
DateTimeParse("2016/28-03","%Y/%d-%m")
返回 2016-03-28。
DateTimeParse([DateTimeNow],"%A %d %B %Y", "Français")
返回 2020-07-14,其中传入日期字符串为 "mardi 14 juillet 2020"(2020 年 7 月 14 日星期二)。
DateTimeParse('Oct 4, 22 11:59:57.99', '%b %d, %y %H:%M:%S')
返回 '2022-10-04 11:59:57'。该函数删除尾随数字。
DateTimeParse('Oct 4, 22 11:59:57.99', '%b %d, %y %H:%M:%S.%3')
返回 '2022-10-04 11:59:57.990'。该函数添加零以匹配 %3 格式。
DateTimeParse('Oct 4, 22 11:59:57.99', '%b %d, %y %H:%M:%S,%3')
返回 '2022-10-04 11:59:57.000'和一条警告,提示期望的是","而不是"."。
DateTimeSeconds
DateTimeSeconds(dt)
:返回日期时间值中的秒数部分,包括任何亚秒级精度(如果适用)。
参数
dt
:日期时间数据,由所选列或带引号的指定日期时间值表示。
示例
DateTimeSeconds('11:59:57.99')
返回 57.99。
DateTimeSeconds('11:59:57')
返回 57。
DateTimeStart
DateTimeStart()
:返回当前工作流开始运行的日期和时间。
DateTimeToday
DateTimeToday()
:返回今天的日期。
预期结果:DateTimeToday 数据类型
尽管名称包含时间,
DateTimeToday()
不返回时间值。而仅返回带有当前日期的日期。您可以将
DateTimeToday()
函数括在
ToDateTime()
函数内以返回时间设置为当天午夜的日期时间值:
ToDateTime(DateTimeToday())
DateTimeToLocal
DateTimeToLocal(dt)
:将 UTC 日期时间转换为本地系统时区。DateTimeToLocal 函数目前不支持
dt
字段中的日期时间精度。
参数
dt
:日期时间数据,由所选列或带引号的指定日期时间值表示。
示例
DateTimeToLocal('2014-08-01 20:01:25')
返回本地系统时区(山地标准时间),即 2014-08-01 14:01:25。
DateTimeToUTC
DateTimeToUTC(dt)
:将日期时间(在本地系统时区)转换为 UTC。DateTimeToUTC 函数目前不
支持 dt 字段中的日期时间精度。
参数
dt
:日期时间数据,由所选列或带引号的指定日期时间值表示。
示例
DateTimeToUTC(DateTimeNow())
:返回工作流运行时的协调世界时间:2014-08-01 20:01:25 (当地山地时间是 2014-08-01 14:01:25)
DateTimeTrim
DateTimeTrim(dt,t)
:删除日期时间中不需要的部分,并返回修改后的日期时间。
参数
dt
:日期时间数据,由所选列或带引号的指定日期时间值表示。
t
: 修剪类型。选项包括:
firstofmonth :修剪至当月的第一天(这与 month 选项相同)。
lastofmonth :将日期延长至当月的最后一天午夜前一秒。
year :修剪至 1 月 1 日午夜。
month :修剪至当月第一天午夜。
day :修剪至当天(即午夜)。这将日期时间转换成时间为零的日期时间(不是日期)。
hour :修剪至小时。
minute :修剪至分钟。
秒 :使用 日期-时间单位的关键字 部分中的关键字剪裁到秒和秒分数引号。
修剪日期时间不会对返回值进行四舍五入。例如,修剪时间 15:59:59 的分钟和秒部分后,时间变成 15:00:00, 而不是 16:00:00。
示例
DateTimeTrim("2016-12-07 16:03:00","year")
返回 2016-01-01 00:00:00。
DateTimeTrim('2016-12-07 11:59:57.99','msec')
返回11:59:57.990。
DateTimeTrim('2016-12-07 11:59:57.99',4)
返回11:59:57.9900。
DateTimeTrim('2016-12-07 11:59:57.123456789','milliseconds')
返回11:59:57.123。
DateTimeYear
DateTimeYear(dt)
返回日期时间值中年份的数字值。
参数
dt
:日期时间数据,由所选列或带引号的指定日期时间值表示。
示例
DateTimeYear("2017-03-24 11:43:23")
返回 2017。
ToDate
ToDate(x)
:将字符串、数字或日期时间转换为日期。
传入字符串的格式应为 YYYY-MM-DD。例如,2020-10-31。
传入数字的格式应为 Excel 日期格式,其中数字表示自 01-01-1900 以来的天数。例如,7000 对应于 03-01-1919。
传入日期时间的格式应为 YYYY-MM-DD hh:mm:ss。例如,2020-10-31 12:00:00。
示例
ToDate('2020-10-31')
将 2020-10-31 作为日期返回。
ToDate(7000)
将 1919-03-01 作为日期返回。
ToDate('2020-10-31 12:00:00')
将 2020-10-31 作为日期返回。
ToDateTime
ToDateTime(x)
:将字符串、数字或日期转换为日期时间。ToDateTime函数不支持大于秒的精度。将Excel值限制为秒表示(5位数,最多99999)。
传入字符串的格式应为 YYYY-MM-DD hh:mm:ss。例如,2020-10-31 12:00:00。
传入数字的格式应为 Excel 日期时间格式,其中数字表示自 01-01-1900 以来的天数。例如,7000.354167 对应于 03-01-1919 上午 8:30。
示例
ToDateTime('2020-10-31')
将 2020-10-31 00:00:00 作为日期时间返回。
ToDateTime(7000.354167)
将 1919-03-01 08:30:00 作为日期时间返回。
ToDateTime('2020-10-31 12:00:00')
将 2020-10-31 12:00:00 作为日期时间返回。