Chris
Chris

Reputation: 141

UTC Time Assignment in VBScript

Does anyone have a simple means in VBScript to get the current time in UTC?

Thanx, Chris

Upvotes: 13

Views: 24867

Answers (6)

Apsis0215
Apsis0215

Reputation: 115

Based on above functions - returns a delta-value to be added to the current time to return UTC.

Or call it with DATE+TIME to return UTC.

Call it once and store in a global variable to offset any date/time to UTC. Conversely Subtract it from any UTC to get the time in the current time zone.

The additional ROUND towards the bottom is an attempt to compensate for floating point errors in the conversion to the nearest second.

Function Time_add_To_get_UTC(Optional DateTime = 0) ''as double
    '' Returns value to add to current time to get to UTC
    ''Based on above functions : )
    ''return offset from current time to UTC
    ''https://stackoverflow.com/questions/15887700/utc-time-assignment-in-vbscript/22842128
    Dim SWDT    ''As SWbemDateTime
    Dim dt          ''As Date
    
    Set SWDT = CreateObject("WbemScripting.SWbemDateTime")
    
    dt = Date + Time()
    
    SWDT.SetVarDate (dt)
    
    Time_add_To_get_UTC = CDbl(SWDT.GetVarDate(False)) - CDbl(SWDT.GetVarDate(True))
    Time_add_To_get_UTC = CDbl(Round(Time_add_To_get_UTC * 24 * 60 * 60, 0) / 24 / 60 / 60)
    Time_add_To_get_UTC = DateTime + Time_add_To_get_UTC
End Function

Upvotes: 0

smoore4
smoore4

Reputation: 4866

Here is an example that formats the date to UTC as well. Note that you cannot format to a millesecond level with this.

Dim formattedDate 
Dim utcDate

Set objShell = WScript.CreateObject("WScript.Shell")

Set dateTime = CreateObject("WbemScripting.SWbemDateTime")

dateTime.SetVarDate(now())
utcDate = dateTime.GetVarDate(false) 

wscript.echo  "Local Time:  " & dateTime
wscript.echo  "UTC Time: " & utcDate

formattedDate = DatePart("yyyy",utcDate) & "-" & Right("0" & DatePart("m",utcDate), 2) & "-" & Right("0" & DatePart("d",utcDate), 2) 
    & "T" & Right("0" & DatePart("h",utcDate), 2) & ":" & Right("0" & DatePart("n",utcDate), 2) 
    & ":" & Right("0" & DatePart("s",utcDate), 2) & ".000+0000"

wscript.echo formattedDate

'results in a format that looks like this: 1970-01-01T00:00:00.000+0000

set dateTime=Nothing
set objShell=Nothing

Upvotes: 0

Jan W Roosch
Jan W Roosch

Reputation: 11

With SetVarDate the offset change due to transition to daylight saving time (from +060 to +120) occurred one hour too soon. The RegRead(HKLM\..\ActiveTimeBias) method was spot-on. If reproduction is desired, just put the pc clock on a time just before and just after the expected transition time and check the results.

Upvotes: 0

Niederee
Niederee

Reputation: 4295

I use a simple technique

Set dateTime = CreateObject("WbemScripting.SWbemDateTime")    
dateTime.SetVarDate (now())
wscript.echo  "Local Time:  " & dateTime
wscript.echo  "UTC Time: " & dateTime.GetVarDate (false)

More info on SWbemDateTime

If you wanted to convert UTC back to local time do this:

Set dateTime = CreateObject("WbemScripting.SWbemDateTime")
        dateTime.SetVarDate now(),false  REM Where now is the UTC date
        wscript.echo cdate(dateTime.GetVarDate (true))

Upvotes: 17

seeker
seeker

Reputation: 316

You can get time bias from Win32_TimeZone WMI class.

myDate = "9/4/2013 17:23:08"
For Each objItem In GetObject(_
    "winmgmts:\\.\root\cimv2").ExecQuery(_
    "Select * from Win32_TimeZone")
    bias = objItem.Bias
Next
myDate = DateAdd("n", bias, myDate)
WScript.Echo myDate

Upvotes: 1

Display Name is missing
Display Name is missing

Reputation: 6227

There are lots of examples out there. If you can access the registry this one will work for you:

od = now() 
set oShell = CreateObject("WScript.Shell") 
atb = "HKEY_LOCAL_MACHINE\System\CurrentControlSet\" &_ 
    "Control\TimeZoneInformation\ActiveTimeBias" 
offsetMin = oShell.RegRead(atb) 
nd = dateadd("n", offsetMin, od) 
Response.Write("Current = " & od & "<br>UTC = " & nd)

From http://classicasp.aspfaq.com/date-time-routines-manipulation/how-do-i-convert-local-time-to-utc-gmt-time.html

Upvotes: 2

Related Questions