0

我正在尝试对我的 VBS 脚本中的文件进行一些日期修改检查。但看起来比较操作取决于运行脚本的机器上设置的日期格式。我有多种机器,其中区域和日期设置可能是俄语、美国英语、英国英语,我需要针对所有机器运行我的 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 进行比较的最佳和最简单的方法是什么?

4

2 回答 2

4

长话短说:解析日期时不要使用本地化的日期格式。

ISO 8601 格式工作得很好:

If objFile.DateLastModified = CDate("2012-10-19 11:34:06") Then
  ' do something
Else
  ' do something else
End If

如果必须,您可以显式使用该SetLocale()函数使您的脚本在不同的环境下运行:

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 上分配的 LCID 列表

于 2013-04-18T08:45:04.693 回答
2
  1. 利用

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

    objFile.DateLastModified = #10/19/2012 11:34:06 AM#
    
  3. 使用xkcd 告诉您的内容。

    objFile.DateLastModified = CDate("2012-10-19 11:34:06")
    
于 2013-04-18T08:44:23.563 回答