获取文件上次修改日期(资源管理器值而不是cmd值)

2023-11-27

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

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

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

 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>

但资源管理器窗口中的同一个文件显示的修改时间为21/11/2010 03:24- 提前1小时。

我编写的代码返回 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

如果有人能够阐明这个问题 - 我们将不胜感激。

===编辑=== 这是我想出的代码,它总是给我提供与资源管理器窗口中显示的时间相同的时间:

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 函数。这帮助文章因为这表明该函数的结果基于系统的区域设置。 DateLastModified 属性的帮助文章没有提供任何此类警告,至少对于 Excel 联机帮助而言是如此。

要修改上面编辑的代码的摘录:

'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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取文件上次修改日期(资源管理器值而不是cmd值) 的相关文章

  • 如何使用 xlrd 将新列和行添加到 .xls 文件

    如何向 xlrd 中的工作表添加新列和 或行 我有一个使用 open workbook 读取的 xls 文件 我需要在第一张表中添加一个新列 bouncebacks 然后在该表中添加新行 但我在 xlrd 文档中找不到任何显示如何添加新行和
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • 父子进程隔离和子进程列表

    请阅读以下模板 PID Status LPID 10 Closed 25 11 Open 25 31 Open 31 25 Closed 25 54 Open 31 17 Open 17 20 Closed 31 88 closed 77
  • 数据透视表、页面过滤器 - 使用日期过滤

    我正在尝试过滤具有日期值的页面过滤器 但我在使用时不断出现错误 PivotFilters Add type xlBefore value 5 1 2015 我还尝试了下面的代码 Dim nd As Long nd CLng Date 90
  • 重新查询时如何避免转到第一条记录?

    在 Access 2010 中制作一个表单 我试图制作一个移动到下一条记录 如果在末尾则为第一个记录 的按钮 但因为我想考虑其他用户对已发生的数据集的更新与此同时 我在转到下一条记录之前重新查询表单 我正在使用以下代码 改编自这个帖子 ht
  • 获取数据后关闭EXCEL应用程序进程

    我正在尝试通过以下方式从列表中的 Excel 文件获取列数据 private void Form1 Load object sender EventArgs e Excel Application xlApp new Excel Appli
  • 如何使用java从Excel工作表中获取特定列名(作为参数传递)的最后一个非空单元格的行索引?

    模块的摘要 获取书籍名称 工作表名称和列名称作为参数 并期望模块返回所需的行索引 public int getExcelData String WBookName String sheetName String columnName int
  • 尝试访问 Delphi 7 中的 Excel 表时的提供程序选择

    我正在尝试使用 TAdoConnection 组件从 Delphi 7 连接到 Excel 表 问题是当我选择 Microsoft Jet OLEDB 4 0 Extended Properties Excel 8 0 时 我有时会收到错误
  • Excel VBA 日期格式

    我有一个包含多个日期的电子表格 这些通常出现在mm dd yyyy or mm dd yyyy hh mm 问题是日期并不总是正确输入 我想进行检查以确保它们是代码中的日期 我最初的想法是使用IsDate检查或CDate但这似乎不起作用 它
  • 刷新电量查询VBA

    因此 我使用下面的代码来刷新我的查询连接 但是 如果由于 wtv 原因刷新失败 如何显示消息 因为此 VBA 显示刷新已完成 即使我的查询存在多个错误 Worksheets Details Unprotect Dim Connection
  • 在 Excel VBA 中,如何保存/恢复用户定义的过滤器?

    如何使用 VBA 保存并重新应用当前过滤器 在 Excel 2007 VBA 中 我试图 保存用户在当前工作表上拥有的任何过滤器 清除过滤器 做东西 重新应用保存的过滤器 看一下捕获自动筛选状态 http www mrexcel com f
  • excel vba范围单元格错误对象定义[重复]

    这个问题在这里已经有答案了 我一直在 Excel 中开发一个宏 该宏对一张工作表 次要 中的表格进行排序 当满足条件时 它应该将该表中的数据添加到第二张工作表 Sheet1 中的另一个表格中 但是我一直运行时出现 1004 错误 对象未定义
  • 对象“_Worksheet”的方法“复制”失败

    我第一次遇到这个错误 对象 Worksheet 的方法 复制 失败 我听说这是一个很常见的错误 但我无法找到解决方案 当我搜索时 我发现了很多关于 对象的 范围 失败 错误 此错误是由工作站的内存限制引起的还是与软件相关的错误 有人有办法解
  • 在 Excel 中使用嵌套 IF 语句

    ID Height Phase Corrected Height Final 1 0 A 0 0 2 1 2 A 1 2 1 2 3 3 9 A 3 9 3 9 4 5 8 A 5 8 5 8 5 4 6 A NA 7 7 6 7 7 A
  • 切换发件人收件箱

    我目前使用的代码可以生成带有某些字段 例如 收件人 抄送 密件抄送 的电子邮件 但我不确定如何自动切换电子邮件的 发件人 部分 Ie my email is here but I want to automatically switch t
  • VBA在选择范围内选择随机行

    我只是想在用户选择的范围内选择随机行 然而 有时程序会选择特定范围之外的随机行 请参阅下面的代码摘录 Dim PopulationSelect As Range Set PopulationSelect Application InputB
  • 在不打开文件的情况下操作/复制 .CSV 数据?

    我正在尝试优化一些代码 这些代码使用存储在 CSV 文件中的一些测试数据进行一些分析并将其数据复制到 Excel 工作表中 此代码通常一次运行数百个测试 每个测试大约需要 4 5 秒 因此有时可能需要几个小时才能完成 我查阅了一些优化技术
  • 如何提取字符串中的一段字符串

    我有一个日志 我想从中提取 name 之后的任何内容 日志看起来像这样 BC WVM FAIL Rend wrong size for BCID 4608603 rend id 4608621 expected sz 220459951 a
  • Excel 在 CSV 导出中添加额外的引号

    我最近创建了一个应用程序 它通过 CSV 将项目添加到数据库 添加项目后 我意识到我的很多值都有不需要的额外引号 这扰乱了我的排序 问题是 当从 Excel 导出到 CSV 时 Excel 会向我所有已包含引号的值添加额外的引号 我在下面展
  • 像 MS Excel 一样在 C++ 中舍入双精度值

    我在网上进行了搜索 但找不到解决我的问题的方法 我只是想要一个像 MS Excel 那样对双精度值进行舍入的函数 这是我的代码 include

随机推荐

  • MCrypt rijndael-256 到 OpenSSL aes-256-ecb 转换

    由于 Mcrypt 已被弃用 我想在代码中使用 OpenSSL 因为我们已经在服务器中使用 php 7 2 4 我使用以下代码进行加密 解密 加密 function encrypt text salt if text return if s
  • 增加 EWS 流订阅连接的生命周期元素

    使用 Microsoft 的 EWS 我们能够监听邮箱并在收到新电子邮件时采取行动 但是 我不知道如何避免连接超时 根据 Microsoft 的说法 以下是 StreamingSubscriptionConnection 的构造函数 pub
  • django模板系统,调用模型内的函数

    我想在模板中调用模型中的函数 例如 class ChannelStatus models Model def get related deltas self epk mystring if not self get error code d
  • 将信息从 Chromium Embedded (Javascript) 发送到包含 C++ 的应用程序

    查看 Chromium 嵌入式框架示例后 我有一个问题 我需要与窗口的嵌入部分进行本机交互 然而 在 CEF 示例中 我看到的只是 c 向浏览器发送消息 而不是相反 我想知道是否有任何方法可以从 JavaScript 从 C 发送消息 就像
  • R 将因子 ID 变量转换为数字 ID 变量

    我对 R 编程有疑问 在花了几个小时查看互联网和 Stack Overflow 上的潜在响应后 我不知道如何解决它 我在 data frame 的一列中有一个因子变量 如下所示 Columnname agsgssg agsgssg agsg
  • 将设备中的磁场 X、Y、Z 值转换为全局参考系

    当您使用 TYPE MAGNETOMETER 传感器时 您将获得与设备方向相关的磁场强度的 X Y Z 值 我想要得到的是将这些值转换为全局参考系 澄清 用户拿起设备 测量这些值 然后将设备绕任何轴旋转一定角度并获得相同的值 请在下面找到类
  • 如何找到数组中至少重复N/2次的元素?

    给定一个包含 N 个元素的数组 我们知道其中一个元素至少重复 N 2 次 我们对其他元素一无所知 它们可能是重复的 也可能是唯一的 有没有办法找出单次重复至少 N 2 次或者可能是 O N 的元素 无需使用额外空间 由于其他用户已经发布了该
  • scikit-learn 中的分层训练/测试分割

    我需要将数据分为训练集 75 和测试集 25 我目前使用下面的代码来做到这一点 X Xt userInfo userInfo train sklearn cross validation train test split X userInf
  • 将 thunk 传递给 puppeteer 的 $.eval

    功能setValue接收一个值并返回一个函数 在第二个函数中 我试图控制台记录以下值value但我得到 Error Evaluation failed ReferenceError value is not defined 我的代码如下 可
  • C 定义的值意外更改

    我有很多 define在我的代码中 现在 一个奇怪的问题出现了 我有这个 define ImmSign 010100 我正在尝试模拟一个二进制数 显然 我期望这个数字变成10100 但是当我使用这个数字时 它已经变成了4160 这里发生了什
  • 用户定义的文字参数中的初始值设定项列表

    我不知道这是否可能 但我想做类似的事情 int someval 1 if 1 2 3 4 v contains someval 但是当我尝试将文字定义为 std vector
  • 用户身份验证未保留在 Laravel 包中

    这是我第一次尝试 Laravel 包 并遇到了一个问题 其中 Auth attempt credentials 在我的登录控制器中工作 但在重定向到受保护的路由或控制器时 用户不再经过身份验证 下面是我的登录控制器方法 其中重定向到仪表板已
  • 在 Windows 上使用 XAMPP 安装 PHP YAML 扩展

    大家好 我目前正在 PhP 上做一些工作 需要我使用以下方法解析 YAML 文件yaml parse file 功能 我对这门语言还很陌生 所以当我尝试在 Windows 上未经修改的 XAMPP 服务器上使用该函数时 我收到错误 找不到函
  • 如何单击或点击 TextView 文本

    我知道这很简单 doh 但我正在寻找一种方法来运行在 Android 应用程序中点击或单击 TextView 文本行的方法 我一直在考虑按钮侦听器和匿名方法侦听器调用 但它似乎不适用于 TextView 有人可以向我指出一些代码片段 以展示
  • HTML5 视频无法流式传输并且需要 90 秒才能加载

    我有一个 HTML5 视频播放器
  • 如果我的项目依赖于python和nodejs,如何编写.travis.yml?

    我的项目包括一些 python 代码并使用 grunt 构建 我写 travis yml like language node js before install pip install Django npm install g grunt
  • 如何允许在不处于编辑模式的情况下对 SwiftUI 列表中的行进行重新排序?

    是否可以在不处于编辑模式的情况下允许对 SwiftUI 列表中的行进行重新排序 那就是给行一个右手汉堡菜单图标 他们可以用它来重新排序一行 就像在编辑模式下可能的那样 如果我正确理解你的问题 那么可以这样做 import SwiftUI s
  • 应用程序关闭时 FCM 推送通知不起作用 Android

    好吧 我到处都找过了 但找不到答案 我已经在我的 Android 应用程序中实现了推送通知 并且当应用程序处于活动状态 前台或后台 时一切正常 但是如果我关闭应用程序 我将停止接收通知 这是我发送通知的 php 代码 public stat
  • javascript DefineProperty 使属性不可枚举

    我试图使用 DefineProperty 使属性不会出现在 for in 循环中 但它不起作用 这段代码正确吗 function Item this enumerable enum this nonEnum noEnum Object de
  • 获取文件上次修改日期(资源管理器值而不是cmd值)

    我编写了一些 Excel VBA 代码来将文件名 版本和上次修改日期 时间添加到工作表中 该代码似乎工作正常 除了有时的时间部分Last Modified Date一个文件将比我在资源管理器窗口中看到的向前或向后正好 1 小时 我注意到 如