【发布时间】:2017-10-25 23:31:11
【问题描述】:
虽然我能够实现我的目标,但我不明白为什么,我担心我仍然做错了什么。
上下文是检索一个日期时间值,以便与另一个日期进行比较,使用 FTP 检索文件的时间戳。日期时间以字符串形式接收:
$FTPrequest = [System.Net.FtpWebRequest]::Create($FTPTargetFile)
$FTPrequest.Method = [System.Net.WebRequestMethods+FTP]::GetDateTimestamp
$FTPrequest.Credentials = $Credentials
$response = $FTPrequest.GetResponse().StatusDescription
$tokens = $response.Split(" ")
if ($tokens[0] -eq 213) {
$Timestampdata = $tokens[1]
} else {
Write-Output "FTP timestamp request for " + $FTPTargetFile + " returned an error"
}
我发现的几乎所有可用资源都清楚地表明 ParseExact 使用字符串来派生日期时间,如下面的脚本行所示:
$d = [DateTime]::ParseExact($Timestampdata,"yyyyMMddHHmmss",$null)
但无论是在脚本中还是在命令提示符下,上述行始终返回以下错误:
使用“3”参数调用“ParseExact”的异常:“无法识别字符串 作为有效的日期时间。” 在 C:\hw-sw\powershell\FTPupload 选项 - getFileInfo.ps1:38 char:1 + $d = [日期时间]::ParseExact($Timestampdata,"yyyyMMddHHmmss",$null) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : 格式异常我发现了 2 个链接(lin1、link2 - 第二个链接解决了一个稍微不同的问题,但重点仍然存在)建议 ParseExact() 使用 intXX 代替,如以下脚本行所示:
$d = [DateTime]::ParseExact([convert]::ToInt64($Timestampdata),"yyyyMMddHHmmss",$null)
是的,上面的行运行没有错误。
虽然我很高兴为我的脚本问题找到了一个潜在的解决方案,但我很不安,因为我不明白为什么 ParseExact 使用的是 int64,而不是我预期的字符串。
PowerShell 中是否有一些设置会改变它的工作方式?我相信我一定是犯了一些简单的错误,但我想不通。
【问题讨论】:
-
字符串中有空格吗?试试
$d = [datetime]::parseexact($Timestampdata.Trim(),"yyyyMMddHHmmss",$null)。 -
好主意。但是,是的,我确实尝试过 .Trim()。行为没有变化。
-
无法复制。请提供示例输入。
标签: powershell