使用VBScript确定我的时区偏移?

5

如何使用 VBScript 确定我的时区偏移量

Windows操作系统提供了TZ环境变量。对于东部标准时间(纽约),它的值为EST5EDT。但是,我正在寻找与UTC的符号整数偏移量。(东部标准时间为-5。)

1个回答

10

这里是一个经过修订的函数,似乎考虑了夏令时的影响。 (灵感来自这个 Stack Overflow 问题。)

Function GetTimeZoneOffset()
    Const sComputer = "."

    Dim oWmiService : Set oWmiService = _
        GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _
                  & sComputer & "\root\cimv2")

    Set cItems = oWmiService.ExecQuery("SELECT * FROM Win32_ComputerSystem")

    For Each oItem In cItems
        GetTimeZoneOffset = oItem.CurrentTimeZone / 60
        Exit For
    Next
End Function

[未考虑夏令时的原始函数。]

以下是我对我的问题的回答 (原始来源)。

对于东部标准时间(纽约),此VBScript函数将返回-5

Function GetTimeZoneOffset()
    Const sComputer = "."

    Dim oWmiService : Set oWmiService = _
        GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _
                  & sComputer & "\root\cimv2")

    Dim cTimeZone : Set cTimeZone = _
        oWmiService.ExecQuery("Select * from Win32_TimeZone")

    Dim oTimeZone
    For Each oTimeZone in cTimeZone
        GetTimeZoneOffset = oTimeZone.Bias / 60
        Exit For
    Next
End Function

这似乎没有考虑夏令时? - Alex R.
@Alex - 请告诉我,我修改后的函数是否已经考虑了你系统上的夏令时。 - DavidRR
对于任何正在搜索的人,这种方法实际上将允许您通过WMI准确地查询基于时间的事件查看器事件。然后,您可以进行计算以考虑事件的默认编写方式为UTC。 - Beems

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接