我正在尝试对我的VBS脚本中的文件进行一些日期修改检查。但看起来比较操作依赖于在runnnig脚本的机器上设置的日期格式。我有各种各样的机器,Regioanal&日期设置可能是俄语,英语美国,英国英国,我需要对所有机器运行我的VBS,并能够正确比较日期。
当我尝试使用
时If objFile.DateLastModified = cdate("19.10.2012 11:34:06") then
do something
Else do something else
End IF
它似乎可以在俄罗斯格式设置的机器上正常工作并进行正确比较,但在英国英国格式设置的机器上失败并出现以下错误
Type mismatch: 'cdate'
800A000D
如果我使用following DateSerial(2012,10,19)
,它不会引发错误,但无法正确比较日期。
将文件修改日期与预定义值与VBS进行比较的最佳和最简单方法是什么,与机器日期格式设置无关?
答案 0 :(得分:4)
长话短说:解析日期时不要使用本地化的日期格式。
ISO 8601格式可以正常使用:
If objFile.DateLastModified = CDate("2012-10-19 11:34:06") Then
' do something
Else
' do something else
End If
如果必须,您可以明确使用SetLocale()
function使您的脚本在不同的环境下运行:
SetLocale 1049 ' LCID "Russian"
MsgBox CDate("5.4.2013 15:00:00") ' April 5, shown as 05.04.2013 15:00:00
SetLocale 1033 ' LCID "English - United States"
MsgBox CDate("5.4.2013 15:00:00") ' Type mismatch error
请参阅MSDN上的list of assigned LCIDs。
答案 1 :(得分:2)
使用
objFile.DateLastModified = DateSerial(2012,10,19) + TimeSerial(11,34,06)
使用日期文字(格式为#mm/dd/yyyy h:mm:ss AM/PM#
,与语言环境无关):
objFile.DateLastModified = #10/19/2012 11:34:06 AM#
objFile.DateLastModified = CDate("2012-10-19 11:34:06")