【问题标题】:VBS objFile.DateLastModified and Date Format SettingsVBS objFile.DateLastModified 和日期格式设置
【发布时间】:2016-06-21 00:15:31
【问题描述】:

我正在尝试对我的 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 进行比较的最佳和最简单的方法是什么?

【问题讨论】:

标签: vbscript


【解决方案1】:

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

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

【讨论】:

  • 您建议的代码:If objFile.DateLastModified = CDate("2012-10-19 11:34:06") Then 为我工作 - 谢谢。
【解决方案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")
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    相关资源
    最近更新 更多