0

世界中に配置されたデバイスで実行されるVBscriptがあるため、さまざまな地域設定を使用します。

スクリプトの一部は2つの日付の差を計算していますが、一貫した結果でそれを機能させることができません。

例:

'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

これは、デバイスがEU以外の地域設定(英語(米国)など)で構成されている場合の結果ですが、(スクリプトの観点から)正しくありません。

AV定義:05-01-2013 07-19-00現在の日付:07-01-2013差分:61

EU以外の地域の設定でこれを機能させるにはどうすればよいですか?

前もって感謝します。

4

1 に答える 1

1

dateKLAVDef常にdd-MM-yyyyhh-mm-ssにあるようです。あれは正しいですか?次に、この文字列から日、月、年を取得し、で作成する必要がDateあり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 に答える