【发布时间】:2014-08-29 22:21:32
【问题描述】:
我的代码已从图像文件中检索到“拍摄日期”属性并将其存储为字符串。然后,它将该字符串传递回 Main Sub,并在其中尝试将其与其他日期(系统时间)进行比较。我收到一条错误消息,提示我无法将字符串日期转换为日期。 (从字符串“8/5/2014”到类型“日期”的转换无效。)
在下面的代码中有两行被注释掉。执行这些行时,程序按预期工作(字符串转换为日期)。注释行中的日期与(视觉上)程序化获取的日期完全匹配;虽然如果我从监视窗口复制和粘贴它也会失败。
Imports System.IO
Imports System.Globalization
Module Module1
Sub Main()
Dim topLevelFolder As New DirectoryInfo("C:\Users\amitchell\Desktop\test1\")
Dim cutoffDate As DateTime = DateTime.Now.AddDays(-30)
Dim Dtaken As String
Dim PassFile
Dim Dtaken2
Using outputFile As New StreamWriter("output_file.txt")
For Each currentFile In topLevelFolder.EnumerateFiles("*.*", SearchOption.AllDirectories)
PassFile = currentFile.FullName
Dtaken = GetProperty(PassFile, 12)
'Dtaken = "8/5/2014"
'Dtaken2 = IsDate(Dtaken)
If Dtaken > cutoffDate Then
outputFile.WriteLine(currentFile.FullName)
End If
Next
End Using
End Sub
Function GetProperty(strFile, n)
Dim objShell As Object
Dim objFolder
Dim objFolderItem
Dim i
Dim strPath
Dim strName
Dim intPos
On Error GoTo ErrHandler
intPos = InStrRev(strFile, "\")
strPath = Left(strFile, intPos)
strName = Mid(strFile, intPos + 1)
objShell = CreateObject("shell.application")
objFolder = objShell.NameSpace(CObj(strPath))
objFolderItem = objFolder.ParseName(strName)
If Not objFolderItem Is Nothing Then
GetProperty = objFolder.GetDetailsOf(objFolderItem, n)
GetProperty = Left(GetProperty, InStrRev(GetProperty, " ") - 1)
GetProperty = Left(GetProperty, InStrRev(GetProperty, " ") - 1)
End If
ExitHandler:
objFolderItem = Nothing
objFolder = Nothing
objShell = Nothing
Exit Function
ErrHandler:
MsgBox(Err.Description, vbExclamation)
Resume ExitHandler
End Function
End Module
【问题讨论】:
-
为什么不将日期保存为 DateTime 而不是将其存储为字符串?我还建议打开 OPTION STRICT ON 以帮助您将 VB.NET 和看起来像 VBscript 的东西结合起来。
-
请不要把vb.net写成vb6。
-
当我将 Function GetProperty(strFile, n) 设置为 DateTime 时,我收到相同的错误:从字符串“8/5/2014 4:21 PM”转换为“日期”无效。我不确定这段代码的哪些部分是 VB.NET 和 VBscript 我会寻找并打开这个选项。
标签: vb.net date visual-studio-2012 date-conversion