0

我想从在某个时间戳或之后更新的 sys_user 表中获取记录。为此,我创建了休息请求

https://service-now.com/api/now/v1//table/sys_user?sysparm_query=sys_updated_on>=javascript:gs.dateGenerate('2017-10-30','01:25:00')

我已将 IST 格式的当前时间转换为 GMT 并将其传递给 dateGenerate() 函数。

问题陈述 - 我不想将 IST 转换为 GMT,有什么方法可以在运行时识别 ServiceNow 实例时区并将给定时间转换为该时间戳并获取用户。如果我能以 UTC 格式传递这个日期和时间。

4

1 回答 1

0

哎哟!

这是一个很好的问题,在 ServiceNow(处理时区)中相当困难。因此,我为您编写了一个工具来管理它。它是完全免费的!

该工具称为 TimeZoneUtil,可在此处找到: https ://snprotips.com/blog/2017/9/12/handling-timezones-in-servicenow-timezoneutil

您只需要初始化一个 GlideDateTime 对象,将其时区设置为 IST,使用 setDisplayValue() 根据 IST 当前时间设置其时间,然后使用 .getValue() 在系统时间中获取相同的时间。这是因为 getDisplayValue()/setDisplayValue() 基于时区工作,而 setValue()/getValue() 总是返回相应的系统时间。


编辑:为了更清楚一点,我将在下面提供一些示例用法。

var tz = new TimeZoneUtils(); //initialize with current time
gs.print(tz.getOffsetHours()); //prints out "-7" in my instance, as the system time is in Pacific.
tz.setTimeZone('Asia/Kolkata'); //sets the time-zone to IST/UTC+5.5
gs.print(tz.getOffsetHours()); //prints "5.5".
gs.print(tz.getGDT().getDisplayValue()); //Prints the current time in IST (2017-11-01 20:52:31 at the moment).
gs.print(tz.getGDT().getValue()); //Prints the current time in system time (2017-11-01 15:23:12 at present).

gs.print(new TimeZoneUtils().setTimeZone('Asia/Kolkata').getDisplayValue()); //Single line, also prints current time in IST: 2017-11-01 20:52:31

那里的前 6 行演示了基本用法并解释了它是如何工作的。然而,第八行演示了单行的用法,您可以在查询字符串中使用它。例如:

sysparm_query=sys_updated_on>=javascript:new TimeZoneUtils().setTimeZone('Asia/Kolkata').getDisplayValue()

希望这可以帮助!


蒂姆伍德拉夫

作者,Learning ServiceNow构建强大的工作流程

所有者/创始人,SN Pro 提示

于 2017-10-30T14:45:24.417 回答