获取文件上次修改date(资源pipe理器值不是cmd值)

我写了一些Excel VBA代码来将文件名,版本和上次修改的date/时间添加到工作表中。 该代码似乎工作正常,除了有时文件的Last Modified Date的时间部分将正好1小时向前或向后从我看到的资源pipe理器窗口中。

我注意到,如果我执行dir命令,我的代码返回的值与cmd窗口中显示的修改date/时间相同。

例如,如果我在system32文件夹中查找dbghelp.dll文件:

  C:\Windows\System32>dir dbghelp.* Volume in drive C has no label. Volume Serial Number is 16E8-4159 Directory of C:\Windows\System32 21/11/2010 04:24 1,087,488 dbghelp.dll 1 File(s) 1,087,488 bytes 0 Dir(s) 60,439,101,440 bytes free C:\Windows\System32> 

但是,资源pipe理器窗口中的相同文件在21/11/2010 (早1小时)显示修改时间为03:24

我写的代码是返回cmd窗口时间,而我想浏览器窗口时间:

  Sub GetFileDetails() Dim path As String Dim objFSO As Object Dim objFile As Object Dim objFolder As Object Dim loopCount As Integer Dim pathCheck As Boolean 'Prompt for directory path path = InputBox(Prompt:="Enter file path", Title:="Enter file path", Default:="") If (path = "" Or path = vbNullString) Then MsgBox ("Invalid path - exiting") Exit Sub End If 'Required for interacting with filesystem Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder(path) '1st row for path title, 2nd row for column headings loopCount = 3 For Each objFile In objFolder.Files Range("A" & loopCount).Value = objFile.Name Range("B" & loopCount).Value = objFSO.GetFileVersion(objFile) Range("C" & loopCount).Value = objFile.DateLastModified 'Combine Version and Modified If Range("B" & loopCount).Value <> "" Then Range("D" & loopCount).Value = Range("B" & loopCount).Value & ", " & Range("C" & loopCount).Value Else Range("D" & loopCount).Value = Range("C" & loopCount).Value End If loopCount = loopCount + 1 Next 'Set up headings Range("A" & 1).Value = (loopCount - 3) & " files found in " & path Range("A" & 2).Value = "FileName" Range("B" & 2).Value = "Version" Range("C" & 2).Value = "Modified" Range("D" & 2).Value = "Version & Modified" End Sub 

如果有人能够解释这个问题 – 这将不胜感激。

===编辑===这是我已经拿出的代码总是给我同样的时间显示在资源pipe理器窗口中:

 Sub GetFileDetails() Dim path As String Dim objFSO As Object Dim objFile As Object Dim objFolder As Object Dim loopCount As Integer Dim pathCheck As Boolean Dim modDate As Date Dim modHour As Integer Dim modMin As Integer 'Prompt for directory path path = InputBox(Prompt:="Enter file path", Title:="Enter file path", Default:="") If (path = "" Or path = vbNullString) Then MsgBox ("Invalid path - exiting") Exit Sub End If 'Required for interacting with filesystem Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder(path) '1st row for path title, 2nd row for column headings loopCount = 3 For Each objFile In objFolder.Files Range("A" & loopCount).Value = objFile.Name Range("B" & loopCount).Value = objFSO.GetFileVersion(objFile) Range("D" & loopCount).Value = objFile.Name 'The date modified time for files made in Summer Time are correct, whereas Winter Time will be 1 hour forward If (IsItSummerTime(objFile.DateLastModified) = True) Then Range("C" & loopCount).Value = objFile.DateLastModified Else modDate = Format(objFile.DateLastModified, "DD-MM-YYYY") modHour = Hour(objFile.DateLastModified) modMin = Minute(objFile.DateLastModified) modHour = modHour - 1 If (modHour < 10) Then If (modMin < 10) Then Range("C" & loopCount).Value = modDate & " 0" & modHour & ":0" & modMin Else Range("C" & loopCount).Value = modDate & " 0" & modHour & ":" & modMin End If Else If (modMin < 10) Then Range("C" & loopCount).Value = modDate & " " & modHour & ":0" & modMin Else Range("C" & loopCount).Value = modDate & " " & modHour & ":" & modMin End If End If End If 'Combine Version and Modified If Range("B" & loopCount).Value <> "" Then Range("E" & loopCount).Value = Range("B" & loopCount).Value & ", " & Range("C" & loopCount).Value Else Range("E" & loopCount).Value = Range("C" & loopCount).Value End If loopCount = loopCount + 1 Next 'Set up headings Range("A" & 1).Value = (loopCount - 3) & " files found in " & path Range("A" & 2).Value = "FileName" Range("B" & 2).Value = "Version" Range("C" & 2).Value = "Modified" Range("D" & 2).Value = "FileName" Range("E" & 2).Value = "Version & Modified" End Sub Function IsItSummerTime(inDate As Date) As Boolean Dim inDateYear As Integer Dim findFirstSunday As Date Dim firstSundayDate As Date Dim startDays As Integer Dim endDays As Integer Dim summerStart As Date Dim summerEnd As Date 'Summer Time starts on the 13th week 'Summer Time ends on the 42nd week If (IsItALeapYear(inDate) = True) Then startDays = (12 * 7) + 1 endDays = (42 * 7) + 1 Else startDays = 12 * 7 endDays = 42 * 7 End If 'Find the date of the first Sunday in the year inDateYear = Year(inDate) For i = 1 To 7 findFirstSunday = DateSerial(inDateYear, 1, i) If (Weekday(findFirstSunday) = 1) Then firstSundayDate = findFirstSunday End If Next i 'Calculate the start and end dates for Summer Time summerStart = firstSundayDate + startDays summerEnd = firstSundayDate + endDays 'Compare inDate to Summer Time values and return boolean value If (inDate >= summerStart And inDate < summerEnd) Then IsItSummerTime = True Else IsItSummerTime = False End If End Function Function IsItALeapYear(inDate As Date) As Boolean If (Month(DateSerial(Year(inDate), 2, 29))) = 2 Then IsItALeapYear = True Else IsItALeapYear = False End If End Function 

看起来这最终是一个操作系统的问题,你必须解决,特别是因为你已经编辑你的代码来说明DST。

但是你也可以使用FileDateTime函数。 此帮助文章指出,此function的结果是基于您的系统的区域设置。 DateLastModified属性的帮助文章不提供任何此类警告,至less对于Excel联机帮助。

要修改上面编辑的代码的exerpt:

 '1st row for path title, 2nd row for column headings loopCount = 3 For Each objFile In objFolder.Files Range("A" & loopCount).Value = objFile.Name 'use the full path name Range("B" & loopCount).Value = FileDateTime(objFile_fullpathname) Range("D" & loopCount).Value = objFile.Name