日期时间函数
日期时间函数对日期和时间值执行操作或计算。使用日期时间函数可增加或减去时间间隔、查找当前日期、查找月的第一天或最后一天、提取日期时间值的某个部分或将值转换为其他格式。
Alteryx 使用格式 YYYY-MM-DD HH:MM:SS 表示日期和时间。为了增加精度(最高精确到 18 位),请在秒数位置后添加一个句点和其他数字。例如 YYYY-MM-DD HH:MM:SS.fff。如果一个日期时间值不是这种格式,Alteryx 则将其读取为字符串。要将列转换成日期时间格式,可使用表达式编辑器中的 DateTimeParse 函数或“日期时间”工具进行。
日期格式
某些日期时间函数要求您设置日期的格式。格式字符串由说明符和分隔符组成。
日期时间函数
请参阅下面的 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 分钟”。
添加较大的单位不会改变较小单位的值。例如,添加小时不会更改分钟或秒的值。添加月不会更改日期或时间,除非生成的月份不存在该天。在这种情况下,系统将用该月的最后一天。
此函数执行计算时,会假设时区不存在与夏令时和标准时间相关的时间变更。如果您的计算包括时间从夏令时更改为标准时间或反向更改的日期和时间,则可能会产生意外的结果。如果实际经过时间的精度至关重要,您应首先将数据转换为 UTC。
DateTimeDay
DateTimeDay(dt):返回日期时间值中当日的数字值。
参数
dt:日期时间数据。
示例
DateTimeDay("2017-03-24 11:43:23") 返回 24。
DateTimeDiff
DateTimeDiff(dt1,dt2,u):第一个参数 (dt1–dt 2) 减去第二个参数,并返回它们之间的整数差值。时间间隔以指定时间单位为单位返回一个数字,而不是返回字符串。
参数
dt:日期时间数据。
u:日期时间单位,使用日期时间单位的关键字部分中的关键字在引号之间指定。
示例
DateTimeDiff("2024-01-18", "2024-01-15", "days") 返回 3。
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 来保留所有支持日期之间的时间间隔。
此函数执行计算时,会假设时区不存在与夏令时和标准时间相关的时间变更。如果您的计算包括时间从夏令时更改为标准时间或反向更改的日期和时间,则可能会产生意外的结果。如果实际经过时间的精度至关重要,您应首先将数据转换为 UTC。
DateTimeFirstOfMonth
DateTimeFirstOfMonth():返回月份的第一天,从午夜开始。
DateTimeFormat
DateTimeFormat(dt,f,[l],[tz]):将日期时间数据从 ISO 格式转换为另一种指定格式 (f),采用指定的语言 (l) 和时区名称 (tz),以用于其他应用程序。输出为字符串数据类型。如果指定格式的精度低于传入数据,则输出将被截断,且不会进行四舍五入。例如,如果您传入的时间精确到微秒 (.012789),而格式指定时间精确到毫秒,则结果将被截断为 .012,而不是四舍五入为 .013。可选的时区参数允许您控制添加到字符串中的文本样式(例如,“EDT”)。
参数
dt:日期时间数据。
f:转换数据的格式,以格式字符串表示。请参阅下文的说明符部分。
l:这是一个可选语言参数。它默认为您选择的 Designer 语言。例如,如果将 Designer 设置为法语,则默认以 DateTimeParse(dt,f,"Français") 取读。请注意,如果省略此参数,则无论 Designer 的界面是何语言,该函数都将使用英语。有关接受的语言值列表,请参阅语言参数。
tz:这是一个可选时区参数。请注意,数据不会转换。这只是为了控制添加到字符串中的文本样式。
使用偏移格式指令 (%z) 时,时区标识符用于确定要显示的偏移量;使用时区名称格式指令 (%Z) 时,则用于获取要显示的时区名称。
时区名称保留参数的样式:短格式(如 EST)、长格式(如东部标准时间)、通用格式(如 ET)或特定格式(如 EST/EDT)。
名称会经过修改,以匹配数据对应的正确季节。例如,对于 2024-08-15,如果提供的 tz 为 EST,则会更正为 EDT。同样,对于 2024-01-15,如果提供的 tz 为 EDT,则会更正为 EST。在这两个示例中,如果提供的 tz 为通用 ET,则不会更改,以显示其为夏令时还是标准时间。
如果函数调用中未提供 tz,则使用系统时区(或使用工作流配置运行时设置中指定的时区)。
示例
DateTimeFormat('2008-04-22',"%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"(可以获得您所在语言环境的小数分隔符。此示例使用逗号而不是小数点)。
DateTimeFormat('2024-03-10 01:00:00', '%b %d, %y %T %Z', '', 'ET') 返回“Mar 10, 24 01:00:00 ET”。时区参数的样式为短格式和通用格式,因此结果中使用该样式。
DateTimeFormat('2024-03-10 01:00:00', '%b %d, %y %T %Z', '', 'EDT') 返回“Mar 10, 24 01:00:00 EST”。时区参数的样式为短格式和特定格式。这与数据的时间不匹配。结果会更正为特定时区的正确偏移量。
DateTimeFormat('2024-03-10 01:00:00', '%b %d, %y %T %Z', '', 'Eastern Time') 返回“Mar 10, 24 01:00:00 Eastern Time”。样式保持不变,且无需更正偏移量。
DateTimeFormat('2024-03-10 01:00:00', '%b %d, %y %T %Z', '', 'Eastern Daylight Time') 返回“Mar 10, 24 01:00:00 Eastern Standard Time”。已更正时区偏移量。
DateTimeFormat('2024-03-10 01:00:00', '%b %d, %y %T %z', '', 'ET') 返回“Mar 10, 24 01:00:00 -0400”。
DateTimeHour
DateTimeHour(dt):返回日期时间值中小时部分的值。
参数
dt:日期时间数据。
示例
DateTimeHour("2017-03-24 11:43:23") 返回 11。
DateTimeHour("2017-03-24") 返回 0(如果只有日期但没有指定时间,则默认小时为午夜时间)。
DateTimeLastOfMonth
DateTimeLastOfMonth():返回当前月份的最后一天,将时钟设置为当天结束前的一秒 (23:59:59)。
此函数获取当前时间,并在您每次调用时进行调整。它不取决于工作流的开始时间。
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([tz]):返回当前日期和时间,包括秒。如果您提供可选的时区 (tz) 参数,则返回的时间将采用该时区。如果在工作流配置运行时设置中指定了时区,则返回的时间将使用该时区。否则,它将使用您的系统时区。
参数
tz:(可选)提供返回的时间的时区。如果提供,则返回的时间将使用此时区。如果省略,它将使用“工作流配置运行时”设置中的时区或您的系统时区。
DateTimeNowPrecise
DateTimeNowPrecise(digits,[tz]):返回当前系统日期和时间,具体到秒后的小数,最多支持 18 位精度。如果您提供可选的时区 (tz) 参数,则返回的时间将采用该时区。如果您未提供时区,则返回的时间将使用您的系统时区或工作流配置运行时设置中指定的时区。
请注意,如果您请求的精度超出操作系统提供的精度,则该函数会在剩余部分填入 0,例如下面的第二个示例。
参数
digits:指定返回值的精度,介于 0 到 18 之间(包括 0 和 18)。
tz:(可选)提供返回的时间的时区。如果提供,则返回的时间将采用该时区。如果省略,则返回的时间将采用您的系统时区。
示例
DateTimeNowPrecise(3) 返回“2022-10-14 11:59:57.991”。
DateTimeNowPrecise(12) 返回“2022-10-14 11:59:57.991238400000”。
DateTimeParse
DateTimeParse(string,f,[l],[tzName]):将指定时区 (tzName) 内指定格式 (f) 和指定语言 (l) 的日期字符串转换为格式 YYYY-MM-DD HH:MM:SS(如果适用,还可以满足可选的日期时间精度要求)。如果指定格式的精度较低,则输出会被截断。
参数
string:日期时间字符串数据。传入数据必须是字符串数据类型,并且可以是日期时间的任何格式,只要此格式与您为 f 参数指定的格式一致即可。
f:要转换的传入日期字符串数据的格式,由带引号的格式字符串表示。
时区
如果传入格式包括 %z 或 %Z,并且输入文本中包含时区信息,则 Alteryx 会知晓输入时区。它会将 DateTime 结果值转换为指定的时区、“工作流配置运行时”设置中指定的时区,或者本地(系统时区)。如果格式或数据不包含时区信息,Alteryx 会假定输入值已为本地时区,并且不会应用任何时间偏移量。
请检查您的数据,并采取适当的步骤,以确保输出格式符合您的预期。有关时区的重要注意事项,请转至时区和夏令时/标准时间更改。
l:(可选)要转换的传入日期字符串数据的语言。语言参数默认为编辑公式时选定的 Designer 语言。如果省略或留空,则使用英语。例如,如果将 Designer 设置为法语,则该函数默认读取 DateTimeParse(string,f,"Français")。有关接受的语言值,请参阅语言参数。
tz:(可选)如果格式中包含 %z 或 %Z,且文本包含时区名称或偏移量,则将数据转换为相应时区。通过示例可以帮助您理解这一点。如果省略时区,则使用工作流配置运行时设置中指定的时区(或系统时区)。
示例
DateTimeParse("2016/28-03","%Y/%d-%m") 返回 2016-03-28。
DateTimeParse('mardi 14 juillet 2020', '%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') 返回 [Null] 和一条警告,提示期望的是“,”而不是“.”。
DateTimeParse('Mar 10, 24 01:00:00 PST', '%b %d, %y %T %Z') 如果本地时区为东部,则返回“2024-03-10 04:00:00”。
DateTimeParse('Mar 12, 24 01:00:00 PST', '%b %d, %y %T %Z') 如果本地时区为东部,由于东部时间已更改为 EDT(东部夏令时),因此返回“2024-03-12 05:00:00”。
DateTimeParse('Mar 10, 24 01:00:00', '%b %d, %y %T %Z') 如果本地时区为东部,则返回“2024-03-10 01:00:00”。尽管格式要求提供时区信息,但数据中不包含任何时区信息。如果不知道输入数据的时区,则不会进行转换。
DateTimeParse('Mar 10, 24 01:00:00 PST', '%b %d, %y %T') 返回“2024-03-11 01:00:00”。如上例所示,如果格式未要求使用时区信息,则任何可能包含时区信息的数据都将被忽略。
DateTimeQuarter
DateTimeQuarter(dt,[Q1Start]):返回日期时间 (YYYY-MM-DD) 值所在年份的季度数值。使用可选的数字参数表示第一季度 (Q1) 的起始月份。
参数
dt:日期时间数据。
Q1Start:可选的数字参数(1-12),表示 Q1的起始月份。
示例
DateTimeQuarter("2023-01-03") 返回 1。没有错误,因为第二个参数为可选。
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,[tz]):将 UTC 日期时间转换为可选的 tz 参数,否则转换为本地系统时区(或工作流配置运行时设置中指定的时区)。DateTimeToLocal 函数现在支持 dt 字段中的日期时间精度。
注意
结果不含任何指示其时区的信息。如果需要时区信息,您需要使用 DateTimeFormat 函数或将结果转换为字符串以指示时区。如果使用 DateTimeFormat 函数,则 tz 参数应为转换过程中所用时区的名称。它可以采用不同的样式,例如 EST、东部夏令时、America/New_York 或“-0400”。有关时区的重要注意事项,请转至时区和夏令时/标准时间更改。
参数
dt:日期时间数据。
tz:这是一个可选时区参数,用作转换日期时间数据。如果函数调用中未提供 (tz),则使用系统时区。
示例
DateTimeToLocal('2014-08-01 20:01:25') 转换为本地系统时区(山区时间),即 2014-08-01 14:01:25。
DateTimeToLocal('2024-08-15 09:00:00.123') 将 UTC 时间转换为系统时间,如果系统时区是 America/New_York,则返回 '2024-08-15 05:00:00.123';如果系统时区是 America/Denver,则返回 '2024-08-03:00:00.123'。
DateTimeToLocal('2024-08-15 09:00:00.123', 'EST') 将 UTC 时间转换为东部夏令时,即使指定的时间是标准时间。查找用于转换的时区时,会忽略夏令时/标准时间的设定,因此将返回“2024-08-15 05:00:00.123”。
DateTimeToUTC
DateTimeToUTC(dt,[tz]):将日期时间(在本地系统时区或提供的时区)转换为 UTC。假定输入的日期时间位于给定时区,否则位于运行工作流的系统对应的时区。DateTimeToUTC 函数现在支持 dt 字段中的日期时间精度。
如果未指定 tz 参数,则该函数将使用工作流配置运行时设置中指定的时区或本地系统时区。
注意
结果不含任何指示其使用 UTC 格式的信息。如果需要时区信息,您需要使用 DateTimeFormat 函数或将结果转换为字符串以指示时区。如果使用 DateTimeFormat 函数,则 tz 参数应为转换过程中所用时区的名称。它可以采用不同的样式,例如 UTC、GMT、Z 或“+0000”。有关时区的重要注意事项,请转至时区和夏令时/标准时间更改。
参数
dt:日期时间数据。
tz:这是一个可选时区参数。如果在函数调用中未指定 tz,则使用“工作流配置运行时”设置中指定的时区。否则,将使用系统时区。
示例
DateTimeToUTC(DateTimeNow()) 返回工作流运行时的协调世界时 (UTC):2014-08-01 20:01:25(当地山区时间是 2014-08-01 14:01:25)。
DateTimeToUTC('2024-08-15 09:00:00.123') 将时间从系统时间转换为 UTC,如果系统时区是 America/New_York,则返回“2024-08-15 13:00:00.123”;如果系统时区是 America/Denver,则返回“2024-08-15:00:00.123”。
DateTimeTrim
DateTimeTrim(dt,t):删除日期时间中不需要的部分,并返回修改后的日期时间。
参数
dt:日期时间数据。
t: 修剪类型。选项包括:
firstofmonth:修剪至当月的第一天(这与 month 选项相同)。
lastofmonth:将日期延长至当月的最后一天午夜前一秒。
year:修剪至 1 月 1 日午夜。
month:修剪至当月第一天午夜。
day:修剪至当天(即午夜)。这将日期时间转换成时间为零的一天(不是日期)。hour:修剪至小时。
minute:修剪至分钟。
seconds:使用日期时间单位的关键字部分中的关键字修剪至秒和秒分数引号。
修剪日期时间不会对返回值进行四舍五入。例如,将时间 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') 返回 2016-12-07 11:59:57.990。
DateTimeTrim('2016-12-07 11:59:57.99',4) 返回 2016-12-07 11:59:57.9900。
DateTimeTrim('2016-12-07 11:59:57.123456789','milliseconds') 返回 11:59:57.123。
DateTimeWeekNum
DateTimeWeek(dt, [StartOfWeek]):返回日期所在年份周数的数值 (1-54),其中包含 1 月 1 日的那一周为该年的第一周(类似于 Excel 中的 WeekNum 函数)。使用可选的数值参数 (StartOfWeek) 表示一周的起始日。例如,1 = 星期日,2 = 星期一,依此类推。
参数
dt:日期时间数据。
StartOfWeek:可选参数,用于指示一周的开始日。例如,1 = 星期日,2 = 星期一,依此类推。StartOfWeek 参数会截断数值。将 6.8 变为 6,将 1.3 变为 1,诸如此类。星期日的默认值为 1。
示例
DateTimeWeekNum("2023-01-03") 返回 1(没有错误,因为 StartOfWeek 参数为可选项)。
DateTimeWeekNum("2023-01-03", ) 返回错误,因为需要可选的 StartOfWeek 参数。
DateTimeWeekNum("2023-01-03", 0) 返回 Null。
DateTimeWeekNum("2023-01-23", 4) 返回 4(表示一周从星期三开始)。
DateTimeWeekNum("2023-01-08", 6.8) 返回 2(将 6.8 截断为 6,表示一周从星期五开始)。
DateTimeWorkDays
DateTimeWorkDays(dt1, dt2, [StartofWeek]):返回两个日期之间的完整工作日天数,假设每周工作 5 天,从星期一开始。使用可选参数 (StartofWeek) 表示工作周开始的天,其中 1 = 星期日,2 = 星期一,...,7 = 星期六。
此函数计算天数,它假设 dt1 为开始日期,dt2 为结束日期。这意味着,如果 dt1 是 dt2 之前的日期,则结果为正值。如果 dt1 是 dt2 之后的日期,则结果为负值。
注意
如果节假日恰逢工作日,该函数仍将其计为工作日。
参数
dt:日期时间数据。
StartOfWeek:可选参数,用于指示工作周的开始日。例如,1 = 星期日,2 = 星期一,依此类推。StartOfWeek 参数会将小数部分截断。将 6.8 变为 6,将 1.3 变为 1,诸如此类。
示例
DateTimeWorkDays("2024-01-02", "2024-01-04", 1) 返回 3。工作周从星期一开始,这是默认情况。
DateTimeWorkDays("2024-01-02", "2024-01-04", 4) 返回 2。工作周将从星期三开始。工作周为星期三至星期日,星期一和星期二被视为“周末”日。
DateTimeWorkDays("2024-01-02", "2024-01-04", 3.8) 返回 3。工作周从星期二开始(函数截断小数部分)。工作周为星期二至星期六,星期日和星期一为“周末”日。
DateTimeWorkDays("2024-01-04", "2024-01-02", 1) 返回 -3。请注意,dt1 日期晚于 dt2 日期。
DateTimeYear
DateTimeYear(dt):返回日期时间值中年份的数字值。
参数
dt:日期时间数据。
示例
DateTimeYear("2017-03-24 11:43:23") 返回 2017。
ToDate
ToDate(x):将字符串、数字或日期时间转换为日期。
传入字符串的格式应为 YYYY-MM-DD。例如,2020-10-31。
传入的数字将被视为自 1899-12-30 起计算的天数。例如,7000 表示 03-01-1919。请注意,
ToDate(1.5)将返回 1899-12-31(小数部分被截断)。传入日期时间的格式应为 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。
传入的数字代表自 1899 年 12 月 30 日起的天数。例如,7000.354167 表示 1919 年 03 月 01 日上午 8:30。小数部分表示具体时间,精确到秒。
ToDateTime(1.5)返回 1899-12-31:00:00。
示例
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 作为日期时间返回。
日期时间函数参考
请参阅以下说明符、分隔符、关键字和语言参数,以便在日期时间函数中使用。
说明符
说明符总是以百分比符号 (%) 开头,后跟一个区分大小写的字母或数字。数据必须至少包含两位数的年。
提示
如果您更希望查看按字母顺序排列的列表,请在下方查看。
说明符 | DateTimeFormat 的输出 | DateTimeParse 支持的输入 |
|---|---|---|
年 | ||
| 年的最后两位数字 ("16")。 | 最多读取 4 位数字,在分隔符或字符串末尾停止,并映射到当前年份减 66 到当前年份加 33 的范围。例如,在 2025 年,两位数的年份会被视为处于 1959 年至 2058 年的区间范围内。 6 位数日期限制 由于年份最多可读取 4 位数,当读取只由 2 位数字代表年且没有分隔符的格式,比方 6 位数字的日期戳(如 %y%m%d 代表类似 170522 的数据,即 May 22, 2017),仍以 4 个数字进行读取。要解决此问题,您可以:
|
| 四位数字的年 ("2016")。 | 读取两位或四位数字。两位数字映射到当前年份减 66 到当前年份加 33 的范围。例如,就 2024 年而言,这个范围在 1958 到 2057 年之间。 |
月 | ||
| 缩写的月份名称 ("Sep") | 月份名称的任何有效缩写 ("Sep", "SEPT.")。仅当给定文本不是(指定语言中的)月份名称时才返回错误。 |
| 完整的月份名称 ("September") | 月份名称或月份名称的任何有效缩写 ("Sep", "SEPT.")。仅当给定文本不是(指定语言中的)月份名称时,它才返回错误。 |
| 缩写的月份名称。与 %b ("Sep") 相同。 | 月份名称的任何有效缩写 ("Sep", "SEPT.")。仅当给定文本不是月份名称时才返回错误。 |
| 月份数字,01 - 12。 | 1 位或 2 位数字的月份,1 或 01 - 12。 |
周 | ||
| 返回以数字表示的周,即 00 - 53,周从星期日开始。 | 不支持 |
| 返回以数字表示的周,即 00 - 53,周从星期一开始。 | 不支持 |
年份/月份中的天 | ||
| 月份中的天 ("01") | 1 位或 2 位数字,忽略空格(“1”或“01”)。 |
| 月份中的天,第一个 0 替换为空格 (" 1")。 | 1 位或 2 位数字,忽略空格(“1”或“01”)。 |
| 一年中的天,001 - 365(闰年为 366) | 一年中 3 位数字的天,001 - 365(闰年为 366)。 |
星期几 | ||
| 星期几的缩写 ("Mon") | 一周内任何一天的有效缩写 ("mon", "Tues.", "Thur")。只有当给定的文本不是一周内的某一天时才返回一个错误。请注意,Alteryx 不会检查指定天的名称是否对特定日期有效。 |
| 完整的星期几名称 ("Monday") | 星期几名称或星期几的任何有效缩写 ("mon", "Tues.", "Thur")。只有当给定的文本不是一周内的某一天时才返回一个错误。请注意,Alteryx 不会检查指定天的名称是否对特定日期有效。 |
| 十进制形式表示的星期几,1-7,星期一为 1。 | 不支持 |
| 数字表示的星期几,0 - 6,星期日为 0。 | 不支持 |
小时,分钟,秒 | ||
| 以 24 小时制表示的小时,00 - 23。 | 小时最多为 2 位数字,0 - 23。与 %p 或 %P 不兼容。 |
| 以 12 小时制表示的小时,01 - 12。 | 小时最多为 2 位数字,1 - 12。必须后跟 %p 或 %P。 |
| 24 小时,第一个 0 是空格,“0”-“23”。 | 小时最多为 2 位数字。 |
| 分钟,00 - 59 | 分钟最多为 2 位数字。 |
| 秒,00 - 59 | 秒最多为 2 位数字。 |
其它 | ||
| 亚秒级精度位数。 | 亚秒级精度高达 18 位。 |
| 计算机区域设置的日期和时间。 | 不支持 |
| 世纪数字 ("20") | 不支持 |
| 等同于 %m/%d/%y | 不支持 |
| 与 %b ("Sep") 相同 | 月份名称的任何有效缩写 ("Sep", "SEPT.")。仅当给定文本不是月份名称时才返回错误。 |
| 12 小时,第一个 0 是空格," 1" - "12"。 | 不支持 |
| "AM"或"PM" | 不区分大小写("aM"或"Pm")。必须接在 %I 后面(请注意这是大写字母“I”,即大写的"i"。12 小时制的小时)。 |
| "am"或"pm" | 不区分大小写("aM"或"Pm")。必须接在 %I 后面(请注意这是大写字母“I”,即大写的"i"。12 小时制的小时)。 |
| 24 小时制中的时间。等同于 %H:%M:%S | 24 小时制中的时间。等同于 %H:%M:%S |
| 计算机区域设置的日期。 | 不支持 |
| 12 小时制时间,包含 AM 或 PM (“11:51:02 AM”)。 | Hours:Minutes:Seconds [AM / PM] |
| UTC 时差(“-600”) | 支持输入。 |
| 完整时区名称 ("Mountain Daylight Time"(山区夏令时))。 | 支持输入。 |
说明符 | 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”,即大写的"i"。12 小时制的小时)。 |
| "am"或"pm" | 不区分大小写("aM"或"Pm")。必须接在 %I 后面(请注意这是大写字母“I”,即大写的"i"。12 小时制的小时)。 |
| 秒,00 - 59 | 秒最多为 2 位数字。 |
| 24 小时制中的时间。等同于 %H:%M:%S | 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 年之间。 6 位数日期限制 由于年份最多可读取 4 位数,当读取只由 2 位数字代表年且没有分隔符的格式,比方 6 位数字的日期戳(如 %y%m%d 代表类似 170522 的数据,即 May 22, 2017),仍以 4 个数字进行读取。要解决此问题,您可以:
|
| 四位数字的年 ("2016")。 | 读取两位或四位数字。两位数字映射到当前年份减 66 到当前年份加 33 的范围。例如,就 2024 年而言,这个范围在 1958 到 2057 年之间。 |
| UTC 时差 ("-600")。 | 支持输入。 |
| 完整时区名称 ("Mountain Daylight Time"(山区夏令时))。 | 支持输入。 |
分隔符
在日期时间说明符之间插入分隔符以形成格式字符串。
分隔符 | DateTimeFormat 的输出 | DateTimeParse 支持的输入* |
|---|---|---|
| / | / 或 - |
| - | / 或 - |
空格 | 空格 | 任何空格字符序列。 |
| 换行 | 不支持 |
| 制表符 | 不支持 |
其他 | 其他字符,如逗号、句点和冒号。 | 其他字符,如逗号、句点和冒号。 |
*DateTimeParse 接受向前斜杠 (/) 和连字符 (-) 的互换使用。但是,逗号、冒号和所有其他分隔符必须与传入数据完全匹配。
日期时间单位的关键字
这些关键字与 DateTimeAdd、DateTimeDiff 和 DateTimeTrim 函数兼容。它们不区分大小写。每个单位接受的关键字均以逗号分隔。
在某些情况下,我们接受缩写,但最多不超过完整的关键词。在下面的列表中以 upto 指定这些缩写,范围从可接受的最短缩写到完整关键字。例如,对于 seconds(秒),我们接受 sec 和 seconds,以及中间的任何东西,如 seco。请注意,关键字为英文,而且翻译成其他语言不受支持。
您也可以使用数字值作为亚秒时间的关键字。这包括下方列表中未特别标注的单位。例如,您可以使用关键字“10”来指示 10 位精度。
yea upto yearsmon upto monthsday, dayshou upto hoursmin upto minutessec upto secondsds, dsec, dsecs, deciseconds, 1.cs, csec, csecs, centiseconds, 2ms, msec, msecs, milliseconds, 3us, usec, usecs, microseconds, 6ns, nsec, nsecs, nanoseconds, 9ps, psec, psecs, picoseconds, 12fs, fsec, fsecs, femtoseconds, 15as, asec, asecs, attoseconds, 18
有关以各种精度单位表示的日期时间字段大小的一些示例,请参阅下表:
名称 | 缩写 | 日期时间大小 | 示例 |
|---|---|---|---|
Seconds(秒) |
| 19(默认值) | 2023-02-24 01:23:45 |
Deciseconds (1)(分秒) |
| 21 (19 + 1 + 1) | 2023-02-24 01:23:45.1 |
Centiseconds (2)(厘秒) |
| 22 (19 + 1 + 2) | 2023-02-24 01:23:45.12 |
Milliseconds (3)(毫秒) |
| 23 (19 + 1 + 3) | 2023-02-24 01:23:45.123 |
Microseconds (6)(微秒) |
| 26 (19 + 1 + 6) | 2023-02-24 01:23:45.123456 |
Nanoseconds (9)(纳秒) |
| 29 (19 + 1 + 9) | 2023-02-24 01:23:45.123456789 |
Picoseconds (12)(皮秒) |
| 32 (19 + 1 + 12) | 2023-02-24 01:23:45.123456789012 |
Femtoseconds (15)(飞秒) |
| 35 (19 + 1 + 15) | 2023-02-24 01:23:45.123456789012345 |
Attoseconds (18)(阿秒) |
| 38 (19 + 1 + 18) | 2023-02-24 01:23:45.123456789012345678 |
语言参数
这些是 DateTimeFormat 和 DateTimeParse 函数支持的“l”(语言)参数的兼容值。
英语名称 | 母语名称 | 语言代码 |
|---|---|---|
English(英语) | English | en |
Italian(意大利语) | Italiano | it |
French(法语) | Français | fr |
German(德语) | Deutsch | de |
Japanese(日语) | 日本語 | ja |
Spanish(西班牙语) | Español | es |
Portuguese(葡萄牙语) | Português | pt |
Chinese(中文) | 简体中文 | zh |
除了上述值之外,亦接受长度至少为 2 个字符且以上述任意字符开头的值。例如,eng、engl、engli 等表示 English(英语),或者 esp、espa、sp、spa、span 等表示 Spanish/Español(西班牙语)。
时区命名
时区命名有多种样式。名称可以是长格式 (Mountain Time)、短格式 (MT)、特定格式(MDT、MST)或通用格式 (MT)。互联网名称分配机构 (IANA) 维护着一个时区信息数据库。其名称样式为“地区/城市”(例如 America/Los Angeles、Europe/Paris)。
时间信息也可以标记为相对于协调世界时 (UTC) 的偏移量。例如,11:31-0500 表示一个比 UTC 晚 5 小时的时区(在 UTC 中,同一时刻为 16:31)。这个时间可以是中部夏令时、东部标准时间或秘鲁时间。IANA 样式是时区的规范名称。根据用户的语言区域设置,可能会接受其他名称。
Alteryx 使用一个广泛使用的库 (ICU) 来查找时区信息。如果您的工作流引用了无法找到的时区,则工作流会报告错误。
警告
请注意,短名称可能产生歧义。例如,IST 可以表示印度标准时间、以色列标准时间或爱尔兰标准时间。因此,请谨慎处理您的输入数据。
为了确保正确处理您的数据,Alteryx 建议将短时区名称替换为长时区名称或 IANA 样式名称。您可以使用查找替换工具来执行此操作。
要按名称查找时区,如果 Designer 语言设置为英语以外的语言(通过用户设置>语言和地区),Alteryx 会首先要求 ICU 使用该语言查找时区。如果使用该语言未能找到时区,Alteryx 则会要求 ICU 使用英语查找时区。在某些地区,即使本地语言中存在较长的时区名称,也会使用英语缩写。如果 Alteryx 没有找到英文名称,它还会尝试从 Designer 界面语言(或函数中指定的语言)开始,查找以每种支持的语言表示的名称。请注意,除英语之外的时区的 ICU 时区名称是有限的。
提示
您应该了解您的数据中所使用的时区名称,并可以考虑使用查找替换工具来确保获得正确的时区名称。
时区和夏令时/标准时间更改
对于实行夏令时和标准时间变更的时区,在试图解析夏令时与标准时间切换点附近的时间时,会遇到问题。
切换到夏令时
在切换到夏令时(夏季)的时刻前后,会有一个小时的时间无效。在美国,当本地标准时间即将到达 2024 年 3 月 10 日凌晨 2:00:00 时,时钟会向前拨快 1 小时,变为本地夏令时 2024 年 3 月 10 日凌晨 3:00:00。
因此,以东部时间为例,2024-03-10 02:30:00 这个时间并不存在。这个时间是无效的,因为不存在这样的时间。但是,Alteryx 库不会检测到此问题。如果转换 DateTimeToUTC('2024-03-10 02:30:00', 'Eastern Time'),代码将应用标准时间的偏移量(5 小时),并返回“2024-03-10 07:30:00”,且不会发出无效输入警告。
切换到标准时间
切换到标准时间时,有一小时会产生歧义。在美国,当本地夏令时即将到达 2024 年 11 月 3 日凌晨 2:00:00 时,时钟会向后拨慢 1 小时,变为本地标准时间 2024 年 11 月 3 日凌晨 1:00:00。
东部时间 2024-11-03 01:30:00 既可能是东部标准时间,也可能是东部夏令时。由于将实际处于夏令时的时间指定为 EST,或将实际处于标准时间的时间指定为 EDT 是非常常见的错误,因此各种库在查找时区信息时通常会忽略季节的设定。
因此,Alteryx 无法通过正确使用指定的季节,将东部时间中具有歧义的那个小时转换为 UTC 时间。它会应用标准时间的偏移量(5 小时),而无论指定使用 EST 还是 EDT 作为时区,即……
DateTimeToUTC('2024-11-03 01:30:00', 'Eastern Daylight Time')返回 2024-11-03 06:30:00。DateTimeToUTC('2024-11-03 01:30:00', 'Eastern Standard Time')返回 2024-11-03 06:30:00。DateTimeToUTC('2024-11-03 01:30:00', 'Eastern Time')返回 2024-11-03 06:30:00。
注意事项和限制
日期支持
Alteryx Designer 无法处理早于 1400 年 1 月 1 日的日期。
Alteryx 支持 1400 年到 9999 年之间的日期。我们假定所有日期都采用公历,公历是目前全球大部分地区通用的民用日历。所有计算(加法和减法)都会忽略闰秒。