转换函数 conversion-functions
利用转换函数,您可以在历程表达式中将数据从一种类型转换为另一种类型。 在使用不同的数据源和操作时,这些函数对于确保数据兼容性和正确类型处理至关重要。
当您需要执行以下操作时,请使用转换函数:
- 将字符串值转换为数字、布尔或日期类型(toInteger,toDecimal,toBool)
- 在不同格式和呈现方式之间转换日期和时间(toDateTime,toDateTimeOnly,toDateOnly)
- 转换介于整数和小数类型(toInteger,toDecimal)之间的数值
- 将值转换为字符串格式(toString)或持续时间(toDuration)
- 确保比较和操作的类型兼容性
- 处理来自可能具有不同类型格式的外部源的数据
每个转换函数都会自动处理特定于类型的规则和边缘案例,从而使数据转换在历程表达式中更加可靠和可预测。
快速参考 quick-reference
toDateTime(例如,计划消息发送、比较不同区域的事件时间戳)。 在只有本地日期时间相关并且时区可以忽略时使用toDateTimeOnly(例如,在条件中比较日历日期)。常见陷阱 pitfalls
- 时区必须为字符串常量 —
toDateTime中的时区参数不能是字段引用或动态表达式。 始终传递文本字符串,如"UTC"或"Europe/Paris"。 - 字符串输入所需的ISO-8601格式 — 在将字符串传递给
toDateTime或toDateTimeOnly时,请确保它遵循ISO-8601格式(例如,"2023-08-18T23:17:59.123Z")。 格式错误的字符串返回null且没有错误。 - 纪元值以毫秒为单位 —
toDateTime(1560762190189)需要毫秒。 如果您的源提供Unix时间戳(以秒为单位),则先乘以1000(例如,toDateTime(myField * 1000))。 - 带有意外字符串的toBool —
toBool仅在字符串值刚好是"true"时才返回true。 任何其他字符串(包括"1"、"yes"、"TRUE")将返回false。
toBool toBool
根据类型将参数值转换为布尔值。
- 从字符串:尝试将字符串值转换为布尔值;如果字符串值为“true”,则从“true”;否则从“false”
- 从数值:如果数值不等于0,则为true;否则为false
toBool(<parameter>)- 小数
- 布尔
- 字符串
- 整数
toBool(<decimal>)
toBool(<boolean>)
toBool(<string>)
toBool(<integer>)
返回布尔值。
toBool("true")
toBool(1)
返回真。
toBool("this is not a boolean")
返回假。
toDateOnly toDateOnly
将参数转换为dateOnly类型值。 要了解有关数据类型的更多信息,请参阅此部分。
toDateOnly(<parameters>)| table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 | |
|---|---|
| 参数 | 类型 |
| 以“YYYY-MM-DD”形式表示的日期的字符串(XDM格式)。 还支持ISO-8601格式:仅考虑 完整日期 部分(请参阅RFC 3339,第5.6节) | 字符串 |
| 日期时间 | dateTime |
| 不带时区的日期时间 | dateTimeOnly |
| 纪元的整数值(以毫秒为单位) | 整数 |
toDateOnly(<dateTime>)
toDateOnly(<dateTimeOnly>)
toDateOnly(<string>)
toDateOnly(<integer>, <integer>, <integer>)
返回dateOnly类型值。
toDateOnly("2023-08-18")
toDateOnly("2023-08-18T00:00:00.000Z")
toDateOnly("2023-08-18T00:00:00")
所有参数都返回表示2023-08-18的dateOnly对象。
toDateOnly(#{ExperiencePlatform.ProfileFieldGroup.person.birthDate})
返回dateOnly。
toDateTime toDateTime
根据参数类型将参数转换为日期时间值。
toDateTime(<parameters>)| table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 5-row-2 | |
|---|---|
| 参数 | 说明 |
| 字符串 | ISO-8601格式的日期时间。 包含时区信息的日期时间的字符串表示形式 |
| 字符串 | 时区id。 时区标识符(例如“UTC”、“欧洲/巴黎”) |
| dateOnly | 表示不带时区的日期,以年 — 月 — 日形式查看 |
| dateTimeOnly | 表示不带时区的日期时间,格式为year-month-day-hour-minute-second-millicond |
| 整数 | 纪元的整数值(以毫秒为单位) |
toDateTime(<string>)
toDateTime(<string>, <dateOnly>)
toDateTime(<string>, <dateTimeOnly>)
toDateTime(<integer>)
返回日期时间。
toDateTime("2023-08-18T23:17:59.123Z")
返回2023-08-18T23:17:59.123Z
ISO-8601字符串已包含时区信息。
toDateTime("Europe/Paris", toDateOnly("2023-08-18"))
返回2023-08-18T00:00:00.000+02:00
这通过将时区与仅用于日期的值组合来创建日期时间。 在指定的时区内,时间设置为午夜(00:00:00)。
toDateTime("UTC", toDateTimeOnly("2023-08-18T23:17:59.123"))
返回2023-08-18T23:17:59.123Z
这通过将时区应用于dateTimeOnly值(没有时区信息)来创建dateTime。
toDateTime(1560762190189)
返回2019-06-17T09:03:10.189Z
将Unix时间戳(以毫秒为单位)转换为dateTime值。
toDateTimeOnly toDateTimeOnly
将参数值转换为仅日期时间值。
toDateTimeOnly(<parameters>)| table 0-row-2 1-row-2 2-row-2 | |
|---|---|
| 参数 | 类型 |
| ISO-8601或“YYYY-MM-DD”格式的日期时间(XDM日期格式) | 字符串 |
| 日期时间 | dateTime |
toDateTimeOnly(<dateTime>)
toDateTimeOnly(<string>)
返回不考虑时区的日期时间。
toDateTimeOnly ("2023-08-18")
返回表示2023-08-18T00:00:00.000的日期时间
toDateTimeOnly(now())
toDecimal toDecimal
根据类型将参数值转换为十进制值。
toDecimal(<parameter>)| table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 | |
|---|---|
| 参数 | 说明 |
| 字符串 | 将字符串值转换为小数 |
| dateTime | 将日期转换为毫秒数(纪元毫秒) |
| 布尔 | 如果为true,则将布尔值转换为1;如果为false,则将布尔值转换为0 |
| 整数 | 转换为小数(示例: 1变为1.0) |
toDecimal(<integer>)
toDecimal(<decimal>)
toDecimal(<string>)
toDecimal(<boolean>)
返回小数。
toDecimal("4.0")
返回4.0。
toDuration toDuration
将参数值转换为持续时间。 有关数据类型的详细信息,请参阅此页面。
toDuration(<parameter>)| table 0-row-2 1-row-2 2-row-2 | |
|---|---|
| 参数 | 说明 |
| 字符串 | 基于ISO-8601持续时间格式PnDTnHnMn.nS的格式,天数被视为刚好24小时 |
| 整数 | 毫秒数 |
如果字符串表达式:接受的格式基于ISO-8601持续时间格式PnDTnHnMn.nS,天数被认为刚好是24小时。
字符串以可选符号开头,由ASCII负号或正号表示。 如果为负值,则整个期间将被否定。 ASCII字母“P”是下一个大写或小写。 然后有四个部分,每个部分包含一个数字和一个后缀。 各节的ASCII后缀为“D”、“H”、“M”和“S”,表示日、小时、分钟和秒,可使用大写或小写。 后缀必须按顺序出现。 ASCII字母“T”必须出现在小时、分钟或秒部分的第一次(如果有)之前。 四个部分中的至少一个必须存在,如果存在“T”,则“T”后面必须至少有一个部分。 每个部分的数字部分必须包含一个或多个ASCII数字。 数字可以用ASCII负号或正号作为前缀。 必须将天数、小时数和分钟数解析为。 必须解析到的秒数以及可选的分数。 小数点可以是点或逗号。 小数部分可以有0到9位数字。
toDuration(<string>)
toDuration(<integer>)
返回持续时间。
toDuration("PT10H")
返回10小时的持续时间。
toDuration("PT4S")
返回4秒的持续时间。
toDuration(4000)
返回4秒的持续时间。
toInteger toInteger
将参数值转换为整数。
toInteger(<parameter>)| table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 | |
|---|---|
| 参数 | 说明 |
| 字符串 | 将字符串值转换为整数 |
| dateTime | 将日期转换为毫秒数(纪元毫秒) |
| 小数 | 通过删除小数部分转换为整数(示例:1.5变为1) |
| 布尔 | 如果为true,则将布尔值转换为1;如果为false,则将布尔值转换为0 |
toInteger(<dateTime>)
toInteger(<decimal>)
toInteger(<integer>)
toInteger(<string>)
toInteger(<boolean>)
返回整数。
toInteger("4")
返回4。
toString toString
根据类型将参数值转换为字符串值。 有关数据类型的详细信息,请参阅此页面。
toString(<parameter>)| table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 5-row-2 6-row-2 | |
|---|---|
| 参数 | 说明 |
| dateTime | 将日期转换为UTC日期格式 |
| dateTimeOnly | 将日期转换为UTC日期格式 |
| 持续时间 | 转换为字符串形式的相应毫秒数 |
| 整数 | 转换为值的字符串表示形式(1变为“1”) |
| 小数 | 转换为值的字符串表示形式(1.5变为“1.5”) |
| 布尔 | 将布尔值转换为“true”(如果为true),“false”(如果为false) |
toString(<dateTimeOnly>)
toString(<dateTime>)
toString(<duration>)
toString(<boolean>)
toString(<integer>)
toString(<decimal>)
返回字符串。
toString(4)
返回“4”。
toString(#{ExperiencePlatform.test_date.person.birthDate}))
返回给定dateOnly字段(XDM日期字段)的字符串表示形式,例如“2023-08-18”。
toString(toDuration(1520))
返回“PT1.52S”。
This section contains structured knowledge intended to support interpretation, retrieval, and question answering related to this topic.
For complete understanding, this information should be combined with the documentation on this page. Neither source is intended to stand alone; the page describes the feature, while this section provides additional context that helps disambiguate terminology, intent, applicability, and constraints.
- TL;DR: This page documents all conversion functions in AJO journey expressions, explaining how to transform values between types such as string, integer, decimal, boolean, date, datetime, and duration.
Intents:
- Convert a string or epoch integer to a timezone-aware datetime using
toDateTime - Convert a string or datetime to a timezone-less datetime using
toDateTimeOnly - Extract a date-only value (year-month-day) from a string or datetime using
toDateOnly - Cast a value to an integer, decimal, or boolean using
toInteger,toDecimal, ortoBool - Serialize any value to its string representation using
toString - Convert a string or millisecond integer to a duration using
toDuration
Glossary:
- dateTime: A datetime value that includes timezone offset information (product-specific)
- dateTimeOnly: A datetime value with no timezone information (product-specific)
- dateOnly: A date value representing year-month-day with no time component (product-specific)
- duration: A time period expressed in ISO-8601 format (e.g., PT10H) (product-specific)
- epoch milliseconds: Unix timestamp expressed in milliseconds since 1970-01-01T00:00:00Z
Guardrails:
- The timezone argument in
toDateTimemust be a string constant — field references and dynamic expressions are not allowed - String inputs to
toDateTimeandtoDateTimeOnlymust follow ISO-8601 format; malformed strings return null without an error toDateTimewith an epoch integer expects milliseconds; multiply seconds-based timestamps by 1000 before passingtoBoolreturnstrueonly for the exact string"true"; strings like"1","yes", or"TRUE"returnfalse
Terminology:
- Canonical name: Conversion functions — Acronym: none — variants: type casting functions, type conversion functions
- Synonyms: “toDateTime” = “convert to datetime with timezone”; “toDateTimeOnly” = “convert to datetime without timezone”
- Do not confuse: “toDateTime” (timezone-aware) ≠ “toDateTimeOnly” (no timezone)
- Do not confuse: “toDateOnly” (date only, no time) ≠ “toDateTime” (date and time with timezone)
FAQ:
- Q: When should I use
toDateTimeversustoDateTimeOnly? — UsetoDateTimewhen timezone information matters (e.g., scheduling or cross-region comparisons); usetoDateTimeOnlywhen only the local date-time is relevant and timezone can be ignored. - Q: Why does
toBool("TRUE")return false? —toBoolonly recognizes the exact lowercase string"true"; all other string values including"TRUE"or"yes"return false. - Q: How do I convert a Unix timestamp in seconds to a dateTime? — Multiply the seconds value by 1000 to get milliseconds, then pass it to
toDateTime, e.g.,toDateTime(myField * 1000). - Q: Can the timezone in
toDateTimebe read from a profile attribute? — No, the timezone ID must be a string constant; field references and expressions are not supported. - Q: What format does
toDurationaccept as a string? — ISO-8601 duration format, e.g.,"PT10H"for 10 hours or"P1DT2H"for 1 day and 2 hours.