go to post Joe Ray · Jun 3, 2020 Hello Jonathan, Assuming you have a class which overrides Ens.Rule.FunctionSet e.g. Class LDH.Lib.FunctionSet Extends Ens.Rule.FunctionSet /// This method will append an offset from UTC to a datetime passed in as HL7 Format /// e.g. "20190711083705" returns "20190711083705+0100" /// - NB BST was introduced in 1970 so dates passed in before 1970 will return +0000 offsets for all dates ClassMethod GetLocalTimeWithUTCOffset(pHL7DateTime As %String) As %String { // If blank datetime passed in return blank Quit:pHL7DateTime="" "" // If the datetime passed in is without a time then return the date unmodified Quit:$Length(pHL7DateTime)<=8 pHL7DateTime // Otherwise convert pHL7DateTime to Local Time with offset from utc Set tLocalTimeStamp = $ZDT(..ConvertDateTime(pHL7DateTime,"%q(0)","%q(3)"),1,5) // Seperate offset from this and remove the : between hours and seconds Set tOffset="+"_$PIECE(tLocalTimeStamp,"+",2) Set:tOffset="+" tOffset="-"_$PIECE(tLocalTimeStamp,"-",2) Set tOffset=$ZSTRIP(tOffset,"*",":") // Append Offset to pHL7DateTime Quit pHL7DateTime_tOffset } } Then you can use it like this: <assign value='##class(LDH.Lib.FunctionSet).GetLocalTimeWithUTCOffset(source.{DateTimeOfMessage.timeofanevent})' property='target.{DateTimeOfMessage.timeofanevent}' action='set' />
go to post Joe Ray · Jun 3, 2020 Hello Jonathan, This is the method I wrote to do this: /// This method will append an offset from UTC to a datetime passed in as HL7 Format/// e.g. "20190711083705" returns "20190711083705+0100"/// - NB BST was introduced in 1970 so dates passed in before 1970 will return +0000 offsets for all datesClassMethod GetLocalTimeWithUTCOffset(pHL7DateTime As %String) As %String{ // If blank datetime passed in return blank Quit:pHL7DateTime="" "" // If the datetime passed in is without a time then return the date unmodified Quit:$Length(pHL7DateTime)<=8 pHL7DateTime // Otherwise convert pHL7DateTime to Local Time with offset from utc Set tLocalTimeStamp = $ZDT(..ConvertDateTime(pHL7DateTime,"%q(0)","%q(3)"),1,5) // Seperate offset from this and remove the : between hours and seconds Set tOffset="+"_$PIECE(tLocalTimeStamp,"+",2) Set:tOffset="+" tOffset="-"_$PIECE(tLocalTimeStamp,"-",2) Set tOffset=$ZSTRIP(tOffset,"*",":") // Append Offset to pHL7DateTime Quit pHL7DateTime_tOffset}