哎哟!
这是一个很好的问题,在 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 提示