Search code examples
azureetlazure-data-factory

Azure Data Factory data flow timezone conversion problem


I was trying to convert a timezone from CST to UTC inside a data flow. A quick google gave me that CST is in UTC-6:00, so it should add 6 hours.

The following derived column function for some reason only added 5 hours:

toUTC(localDatetime, 'CST')

Moreover, CurrentUTC('CST') Gave me the correct 6 hours difference, so I had to rewrite this function like this:

LocalDatetime + hours(toInteger((currentUTC('CST') - currentUTC()) / 1000 / 60 / 60)) 
// Minus between timestamps gives difference in milliseconds

Is this intended behavior? I am worried that when the timezone "shifts" this code will break, so using toUTC would be the best solution, but for some reason it gives incorrect results now


Solution

  • toUTC() converts a datetime to UTC time zone based on the Daylight-Saving Time effectiveness.

    When you are converting from CST to UCT, if your date falls when Daylight saving is effective, then it adds +5 to your date else adds +6 to your date.

    Example:

    enter image description here

    Derived column expression: toUTC(toTimestamp(Date_UTC), 'CST')

    enter image description here