0

我有一个 VBscript,可以在世界各地的设备上运行,因此使用各种区域设置。

我的脚本的一部分正在计算两个日期之间的差异,但我无法得到一致的结果。

一个例子:

'Get system date in EU format    
dEUDate = Right("0" & DatePart("d",Date), 2) & "-" & Right("0" & DatePart("m",Date), 2) & "-" & DatePart("yyyy",Date)

'Read date/time value from an application in registry - will return e.g. 05-01-2013 07-19-00
dateKLAVDef = UCase(objShell.RegRead(strKLAVStateKey & "\Protection_BasesDate"))

'Find date difference
iAVDefAge = DateDiff("d", Left(dateKLAVDef, 10), dEUDate)

WScript.Echo "AV def.: " & dateKLAVDef & vbTab & "Current date: " & dEUDate & vbTab & "Diff: " & iAVDefAge

这是使用 EU 区域设置配置设备时的结果,它给出了正确的结果:

AV 定义:05-01-2013 07-19-00 当前日期:07-01-2013 差异:2

这是使用非欧盟区域设置(例如英语(美国))配置设备时的结果,这(从脚本的角度来看)不正确:

AV 定义:05-01-2013 07-19-00 当前日期:07-01-2013 差异:61

我怎样才能使它与非欧盟区域设置一起使用?

提前致谢。

4

1 回答 1

1

似乎dateKLAVDef总是在 dd-MM-yyyy hh-mm-ss。那是对的吗?然后,您必须从该字符串中检索日、月和年,并将其设为Datewith DateSerial(y, m, d)。它将自动转换为正确的语言环境格式。用当前日期做一个DateDiff,瞧,你准备好了:

' Read date/time value from an application in registry - will 
' return e.g. 05-01-2013 07-19-00
dateKLAVDef = "05-01-2013 07-19-00"

' Define a pattern for the given string
dateKLAVDefPattern = "^(\d+)-(\d+)-(\d+) .*"

' Make a regular expression
Set re = new RegExp
re.Pattern = dateKLAVDefPattern

' Execute the regex
Set matches = re.Execute(dateKLAVDef)

' Retrieve the submatches from the match
dateKLAVDefDay = matches(0).submatches(0)
dateKLAVDefMonth = matches(0).submatches(1)
dateKLAVDefYear = matches(0).submatches(2)

' recreate the dateKLAVDef date as a real date object
dateKLAVDefAsDate = DateSerial(dateKLAVDefYear, dateKLAVDefMonth, dateKLAVDefDay)

' Do a datediff on the created date and the current date
iAVDefAge = DateDiff("d", dateKLAVDefAsDate, Date())
MsgBox iAVDefAge
于 2013-01-07T15:29:20.013 回答