Hi Team,
I have below text and I want to convert it into a Date and Time.
Example:
Text: "01/07/2025 12:00:35 PM"
Date and Time: 01/07/2025 12:00:35 PM or 01/07/2025 12:00:35 PM GMT+00:00
Discussion posts and replies are publicly visible
Did you try the todatetime() function?
https://docs.appian.com/suite/help/24.4/fnc_conversion_todatetime.html
Here are more functions in Appian: https://docs.appian.com/suite/help/24.4/Appian_Functions.html
Not able to get the desired output if i use only todatetime(). I think need to use more functions to get the exact value i am specifying.
What is the desired output? Are you missing the seconds?
Getting below error when used todatetime()
Expression evaluation error at function a!forEach [line 6]: Error in a!forEach() expression during iteration 1: Expression evaluation error at function 'todatetime' [line 19]: Could not cast from Time to Date and Time with Timezone. Details: CastInvalidCould not cast from Time to Date and Time with Timezone. Details: CastInvalid
OK. What is the original data type? When trying to convert a string, this works great for me.
Output of the report data is being used to generate this text which needs to be converted into datetime.
Text is generated like
index(split(fv!item.c0, "_"), 3, null)
output: "01/07/2025 12:00:35 PM"
todatetime( index(split(fv!item.c0, "_"), 3, null))
ERROR:
The split() function returns a list of strings. Not sure where that Time datatype comes from? Can you share more of your code? Ideally a fully working isolated test case?
a!localVariables( local!reportdata: {{c3: fn!datetime(2025, 1, 7, 5, 12, 2, 300), c0: "Workflow_00001_01/07/2025 12:00:35 PM", c1: 1, c2: "Process", dp1: null, dp0: 1055133, dp3: null, dp2: null}, {c3: fn!datetime(2025, 1, 3, 5, 20, 6, 410), c0: "Workflow_0001_01/03/2025 06:09:35 AM", c1: 1, c2: "Process", dp1: null, dp0: 1060892, dp3: null, dp2: null}, {c3: fn!datetime(2025, 1, 2, 12, 40, 13, 960), c0: "Workflow_0001_12/07/2022 06:09:35 AM", c1: 0, c2: "Process", dp1: null, dp0: 1060315, dp3: null, dp2: null}}, a!forEach( items: local!reportdata, expression: if(a!isNotNullOrEmpty(fv!item), { taskName: fv!item.c2, Id: if( a!isNotNullOrEmpty(fv!item.c0), if( left(fv!item.c0, 3) = "PN", index(split(fv!item.c0, "_"), 3, null), index(split(fv!item.c0, "_"), 2, null) ), null ), SubDateTime: index(split(fv!item.c0, "_"), 3, null) }, null) ) )
Add the todatetime() function in line 16 it is working for me not returning any error..
a!localVariables( local!reportdata: local!reportdata: {{c3: fn!datetime(2025, 1, 7, 5, 12, 2, 300), c0: "Workflow_00001_01-07-2025 12:00:35 PM", c1: 1, c2: "Process", dp1: null, dp0: 1055133, dp3: null, dp2: null}, {c3: fn!datetime(2025, 1, 3, 5, 20, 6, 410), c0: "Workflow_0001_01-03-2025 06:09:35 AM", c1: 1, c2: "Process", dp1: null, dp0: 1060892, dp3: null, dp2: null}, {c3: fn!datetime(2025, 1, 2, 12, 40, 13, 960), c0: "Workflow_0001_12-07-2022 06:09:35 AM", c1: 0, c2: "Process", dp1: null, dp0: 1060315, dp3: null, dp2: null}}, a!forEach( items: local!reportdata, expression: if(a!isNotNullOrEmpty(fv!item), { taskName: fv!item.c2, Id: if( a!isNotNullOrEmpty(fv!item.c0), if( left(fv!item.c0, 3) = "PN", index(split(fv!item.c0, "_"), 3, null), index(split(fv!item.c0, "_"), 2, null) ), null ), SubDateTime: a!localVariables( local!date:split(fv!item.c0,"_"), todatetime(substitute(index(local!date,3,null),"-","/")) ) }, null) ) )
Its erroring for me
its eliminating the seconds part from time and date time is not in a format mm/dd/yyyy hh:mm:ss AM/PM
I asked that exact question already.
If the todatetime() function does not fit your needs, you will have to parse that string yourself using split().
Using this pattern, you can create your own date parsing expression.