VBS objFile.DateLastModified和日期格式设置

时间:2013-04-18 08:28:55

标签: vbscript

我正在尝试对我的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进行比较的最佳和最简单方法是什么,与机器日期格式设置无关?

2 个答案:

答案 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)

  1. 使用

    objFile.DateLastModified = DateSerial(2012,10,19) + TimeSerial(11,34,06)
    
  2. 使用日期文字(格式为#mm/dd/yyyy h:mm:ss AM/PM#,与语言环境无关):

    objFile.DateLastModified = #10/19/2012 11:34:06 AM#
    
  3. 使用xkcd tells you

    objFile.DateLastModified = CDate("2012-10-19 11:34:06")