如何将#datetime 转换为我的本地时区?

Ada*_*dam 6 excel m powerquery powerbi

Power Query 中的列将 JavaScript 时区转换为英国格式:

= #datetime(1970, 1, 1, 0, 0, 0) + #duration(0, 0, 0, [Timestamp]/1000)
Run Code Online (Sandbox Code Playgroud)

但这会产生错误的输出(-1hr 差异),大概是由于 UTC / GMT+夏令时差异?

我尝试使用以下代码再次转换:

= DateTimeZone.ToLocal(#datetime(1970, 1, 1, 0, 0, 0) + #duration(0, 0, 0, [Timestamp]/1000))
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

Expression.Error: We cannot convert the value #datetime(2019, 7, 11, 23, 11, 40) to type DateTimeZone.
Details:
    Value=11/07/2019 23:11:40
    Type=Type
Run Code Online (Sandbox Code Playgroud)

我该如何正确地做到这一点?

编辑:

Timestamp = Text.BetweenDelimiters([ReceivedTime], "(", ")"), type text
Run Code Online (Sandbox Code Playgroud)

其中[ReceivedTime]是以毫秒为单位的 JSON 日期,例如:/Date(1562886700000)/

可能有一种更明智的方法来转换 JSON 日期,而无需借助Text方法。

生成的解决方案应在 Power BI 报告中正确显示 - 报告应显示用户本地时区中的所有日期时间。

Car*_*lsh 5

DateTimeZone.ToLocal接受一个datetimezone参数,但你只有一个datetime. 不同的函数DateTimeZone.From可以将 a 转换datetimedatetimezone,但它假设输入datetime位于本地区域,这会将其转换为相反的方向。

相反,您可以#datetimezone使用 UTC 时区调用构造函数,然后将其转换为您的本地时区:

= DateTimeZone.ToLocal(#datetimezone(1970, 1, 1, 0, 0, 0, 0, 0) + #duration(0, 0, 0, [Timestamp]/1000))
Run Code Online (Sandbox Code Playgroud)