2013-04-18 76 views
0

我想對我的VBS腳本中的文件做一些日期修改檢查。但是它看起來比較操作取決於在腳本是runnnig的機器上設置的日期格式。我有不同的機器Regioanal &日期設置可能是俄羅斯,英國美國,英國英國和我需要運行我的VBS對所有機器和能夠正確比較日期。VBS objFile.DateLastModified和日期格式設置

當我試圖使用

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進行比較的最佳和最簡單的方法是什麼?

+3

相關閱讀:[XKCD 1179:ISO 8601](http://xkcd.com/1179/) – Tomalak

回答

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") 
    
+0

對於日期字面量,我一直忘記它存在。 – Tomalak

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 

參考list of assigned LCIDs上MSDN。

+0

代碼你suggesed:'如果objFile.DateLastModified = CDate(「2012-10-19 11:34:06」)然後'爲我工作 - 謝謝。 – Mikhail