Forum Discussion

android1's avatar
android1
Post Patron
10 years ago
Solved

Convert json DateTime format

Hi,

 

How do I convert a column containing a date and time in the json format to DateTime. My dates are like this /Date(1457355600000)

  • I was referring to change your query name so that your table name in the data model doesn't have the GUID and such in it and ? and such.

13 Replies

  • Greg_Deckler's avatar
    Greg_Deckler
    Community Champion

    My understanding of JSON Dates is that it is the number of milliseconds from a reference date of 1/1/1970. Therefore, I would strip out all the text characters, if you need assistance with that, let me know but you could do it with a MID that grabs the first character after the ( and grabs the number of characters up until the ). Make sure it is a number format and then you can use the following DAX:

     

    Date = DATE(1970,1,1) + [JSONDate]/1000/86400

    Basically, divide by 1,000 to get seconds and then by 86,400, the number of seconds in a day (you could just divide by 864,000. This gives you the number of days since 1/1/1970 and then you just add that to a date of 1/1/1970. I got back "3/7/2016 1:00:00 PM"

    • android1's avatar
      android1
      Post Patron

      Hi,

       

      Thanks for your assistance. I'm having a bit of trouble with this. I have stripped out the text using extract. I am left with values such as 453808709000. When I change this column to a decimal number I get 4.53809E+11.

       

      I perform the following DAX formula -> Temp1 = DATE(1970,1,1) + [Column1.DutyTimeFrom]/1000/86400. 

      [Column1.DutyTimeFrom] contains 4.53809E+11.

       

      i get the following error message -> The value for 'Column1.DutyTimeFrom' cannot be determined. Either 'Column1.DutyTimeFrom' doesn't exist, or there is no current row for a column named 'Column1.DutyTimeFrom'.

       

      • Greg_Deckler's avatar
        Greg_Deckler
        Community Champion

        android1 - Can you post a screen shot of your data model so that I can see your columns? The error indicates that it can't find [Column1.DutyTimeFrom]. This could be because you need to put the table name in front of it or that there is a typo or something.

  • I would not recommend to do the transformation in a DAX calculated column.

    You can do it with Power Query by Transforming an existing column.

     

    The step to execute to do the transformation

    = Table.TransformColumns(#"<previous step name>",{{"<column name to update>", DateFromJson}})

    The code of the Power Query custom function

    let DateFromJson = (date as any) as any =>
         let
            input = if date is null then "/Date(00000000000000)/"else date,
             Stripped = if Text.StartsWith(input, "/Date(") and Text.EndsWith(input, ")/") then Text.Range(input, 6, Text.Length(input) - 8) else error "Not a date",
             Position = Text.PositionOfAny(Stripped, {"+", "-"}, 1),
             Parts = if Position < 0 then { Stripped, "0" } else { Text.Range(Stripped, 0, Position), Text.Range(Stripped, Position) },
             NumberParts = { Number.FromText(Parts{0}), Number.FromText(Parts{1}) },
             Result = Date.FromText("1/1/1970") + #duration(0, 0, 0, (NumberParts{0} + 36000 * NumberParts{1}) / 1000),
            output = if Date.Year(Result) = 1970 then null else Result
    
         in
      output 
     in DateFromJson

     

  • Anonymous's avatar
    Anonymous
    Not applicable

    How I can convert this format "2019-10-14T19:46:53.2751336Z" to "2019-10-14 19:46:53"?

    Thaks!

    • Anonymous's avatar
      Anonymous
      Not applicable

      Anonymous try cleaning the column with the Clean function on the ribbon. It worked for me.