为什么这个节目在同一时间出现了两次:
=Now() & ' ' & TimeZone() & '\n' & ConvertToLocalTime(Now(), 'UTC') & ' UTC'这表明:
2017-04-08 07:53:27 GMT-08:00
2017-04-08 07:53:27 UTC我试图有条件地格式化一个枢轴表表达式,基于它的开始时间戳是否“在未来”。所讨论的字段是正确的(ConvertToLocalTime([Start Time], 'UTC')显示正确的时间戳),并且本地时间也是正确的,但是我不能准确地将本地非UTC时间与来自不同时区的其他时间进行比较。
发布于 2017-04-20 13:11:33
在帮助文件中,您会注意到这是将UTC或GMT时间戳转换为本地时间的双重值。
因此,使用情况如下:
=ConvertToLocalTime(UTC(), 'GMT-05:00')以你为例:
=ConvertToLocalTime(UTC(), TimeZone() ) & ' ' & TimeZone() & '\n' & UTC() & ' UTC'帮助文件来源:http://help.qlik.com/en-US/qlikview/12.1/Subsystems/Client/Content/Scripting/DateAndTimeFunctions/converttolocaltime.htm
发布于 2017-04-20 17:49:29
部分问题是,我误读了文档的部分,即它需要一个格林尼治标准时间或UTC时间戳来操作。(我习惯于其他编程语言,其中时区存储在时间戳中或带有时间戳,并且可以自动调整。)
这方面的另一个方面(在最初的问题中没有说明)是,QV依赖底层操作系统获取一些时区信息,而且我认为Windows (因此,QV桌面和QV服务器)正在做一些奇怪的事情,我认为是不正确的:尽管UTC不遵守夏时制。,Windows为"UTC“和"UTC+00:00”提供了不同的时间。(如果对这种行为有有效的解释,请评论!)
ConvertToLocalTime(UTC()) : 2017-04-20 10:12:17
ConvertToLocalTime(UTC(), "UTC") : 2017-04-20 17:12:17
ConvertToLocalTime(UTC(), "UTC+00:00") : 2017-04-20 18:12:17 (huh?)
ConvertToLocalTime(UTC(), "UTC+00:00", "True") : 2017-04-20 17:12:17(上面显示了文本的双引号,用于实际函数调用的单引号。) ConvertToLocalTime()有第三个参数,ignore_dst,可以用来减轻这一点,但是由于它是一个核子选项,不能安全地应用于非UTC时区,所以如果没有其他几个检查,我就无法编程地处理时区。
底线:QV不使用时间戳存储时区。也就是说,它依赖于程序员跟踪时间戳的来源并根据需要进行转换。这意味着,如果曾经使用时区或存在问题,所有数据都应该存储在"UTC“中(而不是"UTC+00:00"),这样就可以很容易地将ConvertToLocalTime()转换成其他区域。(许多建议的TZ最佳做法适用于这里。)
关联:不是所有的数据库时间戳类型都支持QV。例如,不支持Server的datetimeoffset,因此需要手动解析才能保留时区并正确使用数值/时间戳双重。
https://stackoverflow.com/questions/43295608
复制相似问题