Skip to main content

日期时间函数

日期时间函数对日期和时间值执行操作或计算。使用日期时间函数可增加或减去时间间隔、查找当前日期、查找月的第一天或最后一天、提取日期时间值的某个部分或将值转换为其他格式。

日期支持

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 upto years

  • mon upto months

  • day, days

  • hou upto hours

  • min upto minutes

  • sec upto 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

有关以各种精度单位表示的日期时间字段大小的一些示例,请参阅下表:

名称

缩写

日期时间大小

示例

sec

19(默认)

2023-02-24 01:23:45

分秒 (1)

ds, dsec, dsecs

21 (19 + 1 + 1)

2023-02-24 01:23:45.1

厘秒 (2)

cs, csec, csecs

22 (19 + 1 + 2)

2023-02-24 01:23:45.12

毫秒 (3)

ms, msec, msecs

23 (19 + 1 + 3)

2023-02-24 01:23:45.123

微秒 (6)

us, usec, usecs

26 (19 + 1 + 6)

2023-02-24 01:23:45.123456

纳秒 (9)

ns, nsec, nsecs

29 (19 + 1 + 9)

2023-02-24 01:23:45.123456789

皮秒 (12)

ps, psec, psecs

32 (19 + 1 + 12)

2023-02-24 01:23:45.123456789012

飞秒 (15)

fs, fsec, fsecs

35 (19 + 1 + 15)

2023-02-24 01:23:45.123456789012345

阿秒 (18)

as, asec, asecs

38 (19 + 1 + 18)

2023-02-24 01:23:45.123456789012345678

说明符

说明符总是以百分比符号 (%) 开头,后跟一个区分大小写的字母或数字。数据必须至少包含两位数的年。

说明符

DateTimeFormat 的输出

DateTimeParse 支持的输入

%1 - %18 (范围内的数字)

亚秒级精度位数。

亚秒级精度高达 18 位。

%a

星期的缩写 ("Mon")

一周内任何一天的有效缩写 ("mon", "Tues.", "Thur")。只有当给定的文本不是一周内的某一天时才返回一个错误。请注意,Alteryx 不查证所指的周内的某一天是否与相应的日期相吻合。

%A

完整的工作日名称 ("Monday")

星期几名称或星期几的任何有效缩写 ("mon", "Tues.", "Thur")。只有当给定的文本不是一周内的某一天时才返回一个错误。请注意,Alteryx 不查证所指的周内的某一天是否与相应的日期相吻合。

%b

缩写的月份名称 ("Sep")

月份名称的任何有效缩写 ("Sep", "SEPT.")。仅当给定文本不是月份名称时才返回错误。

%B

完整的月分名称 ("September")

月份名称或月份名称的任何有效缩写 ("Sep", "SEPT.")。仅当给定文本不是月份名称时才返回错误。

%c

计算机区域设置的日期和时间。

不支持

%C

世纪数字 ("20")

不支持

%d

月份中的日期 ("01")

1 位或 2 位数字,忽略空格(“1”或“01”)。

%D

相当于 %m/%d/%y

不支持

%e

月份中的日期,第一个 0 替换为空格 (" 1")。

1 位或 2 位数字,忽略空格(“1”或“01”)。

%h

与 %b ("Sep") 相同

月份名称的任何有效缩写 ("Sep", "SEPT.")。仅当给定文本不是月份名称时才返回错误。

%H

以 24 小时制表示的小时,00 - 23。

小时最多为 2 位数字,0 - 23。与 %p 或 %P 不兼容。

%I (请注意这是大写字母“I”)

以 12 小时制表示的小时,01 - 12。

小时最多为 2 位数字,1 - 12。必须后跟 %p 或 %P。

%j

一年中的日期,001 - 365(闰年为 366)

一年中的 3 位数字的日期,001 - 365(闰年为 366)

%k

24 小时,第一个 0 是空格," 0" - "23"。

小时最多为 2 位数字。

%l (请注意这是小写字母"ell",即小写的 L)

12 小时,第一个 0 是空格," 1" - "12"。

不支持

%M

分钟,00 - 59

分钟最多为 2 位数字。

%m

月份数字,01 - 12。

1 位或 2 位数字的月份,1 或 01 - 12。

%p

"AM"或"PM"

不区分大小写("aM"或"Pm")。必须接在 %I 后面(请注意这是大写字母“I”,12 小时制的小时)。

%P

"am"或"pm"

不区分大小写("aM"或"Pm")。必须接在 %I 后面(请注意这是大写字母“I”,12 小时制的小时)。

%S

秒,00 - 59

秒最多为 2 位数字。

%T

24 小时制中的时间。等同于 %H:%M:%S

不支持

%u

小数形式表示的星期几,1-7,星期一为 1。

不支持

%U

返回以数字表示的周,即 00 - 53,周从星期日开始。

不支持

%w

数字表示的星期,0 - 6,星期日为 0。

不支持

%W

返回以数字表示的周,即 00 - 53,周从星期一开始。

不支持

%x

计算机区域设置的日期。

不支持

%X

12 小时制时间,包含 AM 或 PM (“11:51:02 AM”)。

Hours:Minutes:Seconds [AM / PM]

%y

年的最后两位数字 ("16")。

最多读取 4 位数字,在分隔符或字符串末尾停止,并映射到当前年份减 66 到当前年份加 33 的范围。例如,就 2016 年而言, 这个范围在 1950 到 2049 年之间。

6 位数日期限制

由于年份最多可读取 4 位数,当读取只由 2 位数字代表年且没有分隔符的格式,比方 6 位数字的日期戳(如 %y%m%d 代表类似 170522 的数据,即 May 22, 2017),仍以 4 个数字进行读取。要解决此问题,您可以:

  • 根据日期范围,将年改成 4 位数字(例如,2017 而不是 17)。

  • 使用 正则表达式工具 在字符串的前 2 位数字后插入空格。

%Y

四位数字的年 ("2016")。

读取 2 位或 4 位数字。2 位数字映射到当前年份减 66 到当前年份加 33 的范围。例如,就 2016 年而言, 这个范围在 1950 到 2049 年之间。

%z

UTC 时差 ("-600")

不支持

%Z

完整时区名称 ("山区夏令时")。

不支持

分隔符

在日期时间说明符之间插入分隔符以形成格式字符串。

分隔符

DateTimeFormat 的输出

DateTimeParse 支持的输入*

/

/

/ 或 -

-

-

/ 或 -

空格

空格键

任何空格字符序列。

%n

换行

不支持

%t

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 号,但该年 2 月份的最后一天是 29 号)。 

DateTimeAdd("2016-03-30", -1, "month") 返回 2016-02-29(因为 2 月没有 30 号,但该年 2 月份的最后一天是 29 号)。 

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

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,如果适用,还可以满足可选的日期时间精度要求)。如果指定格式的精度较低,则输出会被截断。

参数

string :日期时间字符串数据,由所选字段或带引号的日期时间字符串表示。传入数据必须是字符串数据类型,并且可以是日期时间的任何格式,只要此格式与您为 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'和一条警告,提示期望的是","而不是"."。

DateTimeQuarter

DateTimeQuarter(dt, [Q1Start] :返回日期时间 (YYYY-MM-DD) 值所在年份的季度的数值。使用可选的数字参数表示第一季度 (Q1) 的起始月份。

参数

dt :日期时间数据,由所选列或带引号的指定日期时间值表示。

Q1Start :可选的数字参数 (1-12) ,表示 Q1的起始月份。

示例

DateTimeQuarter("2023-01-03") 返回 1。没有错误,因为第二个参数为可选。

DateTimeQuarter("2023-01-03", ) 返回错误。需要第二个参数。

DateTimeQuarter("2023-05-03", 1) 返回 2。

DateTimeQuarter("2023-05-03", 7) 返回 4。可选参数表示 Q1 从七月开始。

DateTimeQuarter("2023-05-03 12:04:55", 7) 返回 4。可选参数指示 Q1 从七月开始,时间戳会被忽略。

DateTimeQuarter("2023-01-03", 13) 返回 Null。第二个参数必须是介于 1–12 之间的数值。

DateTimeQuarter("2023-01-03", 0) 返回 Null。第二个参数必须是介于 1–12 之间的数值。

DateTimeQuarter("2023-01-03", -1) 返回 Null。第二个参数必须是介于 1–12 之间的数值。

DateTimeQuarter("12:00:55") 返回 Null。

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()) 返回工作流运行时的协调世界时间 (UTC):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 作为日期时间返回。