将 CSV 中的日期与参考日期进行比较
Compare date from CSV to reference date
我正在使用 PowerShell 脚本解析 CSV 文件。我想将从 CSV 文件中读取的日期与当前日期进行比较,并执行某些操作或退出处理脚本。谁能帮我解决以下问题?
CSV 文件中的日期如下所示:
交易日期:,2015-12-14
$CurrentTimeStamp = Get-Date
$TradeDate = $CurrentTimeStamp.ToString("yyyyMMdd")
$CheckDate = $TradeDate
交易日期如上:
$FileTradeDate = $Cols[1]
$TradeDate = $FileTradeDate.ToString("yyyy-MM-dd")
if ($TradeDate -ne $CheckDate) {
$host.Exit()
} else {
$TradeDate = $FileTradeDate
LogWrite $TradeDate
}
我遇到以下错误:
Cannot find an overload for "ToString" and the argument count: "1".
At \multinasdub301\Software\SysAdmin\WebDownloads\ProcessUBSFrescoCCYHDG.ps1:139 char:5
+ $TradeDate = $FileTradeDate.ToString("yyyy-MM-dd")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
从 CSV 文件中读取的数据已经是一个字符串,从您的示例来看,它似乎已经是 yyyy-MM-dd
格式,因此无需再次将其转换为字符串。但是,您需要使用相同的格式来格式化 $checkDate
,否则字符串永远不会匹配:
$CheckDate = (Get-Date).ToString('yyyy-MM-dd')
或者您可以将 CSV 中的日期解析为实际 DateTime
值并比较两个日期:
$CheckDate = (Get-Date).Date
$culture = [Globalization.CultureInfo]::InvariantCulture
Import-Csv 'C:\path\to\your.csv' |
Select-Object -Property *, @{n='Trading Date';e={
[DateTime]::ParseExact($_.'Trading Date', 'yyyy-MM-dd', $culture)
}} -Exclude 'Trading Date' |
ForEach-Object {
if ($_.'Trading Date' -eq $CheckDate) {
$TradeDate = $FileTradeDate
LogWrite $TradeDate
}
}
我正在使用 PowerShell 脚本解析 CSV 文件。我想将从 CSV 文件中读取的日期与当前日期进行比较,并执行某些操作或退出处理脚本。谁能帮我解决以下问题?
CSV 文件中的日期如下所示:
交易日期:,2015-12-14
$CurrentTimeStamp = Get-Date
$TradeDate = $CurrentTimeStamp.ToString("yyyyMMdd")
$CheckDate = $TradeDate
交易日期如上:
$FileTradeDate = $Cols[1]
$TradeDate = $FileTradeDate.ToString("yyyy-MM-dd")
if ($TradeDate -ne $CheckDate) {
$host.Exit()
} else {
$TradeDate = $FileTradeDate
LogWrite $TradeDate
}
我遇到以下错误:
Cannot find an overload for "ToString" and the argument count: "1".
At \multinasdub301\Software\SysAdmin\WebDownloads\ProcessUBSFrescoCCYHDG.ps1:139 char:5
+ $TradeDate = $FileTradeDate.ToString("yyyy-MM-dd")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
从 CSV 文件中读取的数据已经是一个字符串,从您的示例来看,它似乎已经是 yyyy-MM-dd
格式,因此无需再次将其转换为字符串。但是,您需要使用相同的格式来格式化 $checkDate
,否则字符串永远不会匹配:
$CheckDate = (Get-Date).ToString('yyyy-MM-dd')
或者您可以将 CSV 中的日期解析为实际 DateTime
值并比较两个日期:
$CheckDate = (Get-Date).Date
$culture = [Globalization.CultureInfo]::InvariantCulture
Import-Csv 'C:\path\to\your.csv' |
Select-Object -Property *, @{n='Trading Date';e={
[DateTime]::ParseExact($_.'Trading Date', 'yyyy-MM-dd', $culture)
}} -Exclude 'Trading Date' |
ForEach-Object {
if ($_.'Trading Date' -eq $CheckDate) {
$TradeDate = $FileTradeDate
LogWrite $TradeDate
}
}