簡體   English   中英

在 Powershell 中從 CSV 導入數據以 CSV 格式提供英國日期不到 7 天

[英]Importing Data From CSV in Powershell Providing UK Date in CSV is Less Than 7 Days Away

所以我有一個帶有 5 個標題的 CSV 文件:名稱、集合日期、位置、設備注釋、經理。

現在我的 collectionDates 都是英國格式,所以 DD/MM/YYYY。 我只想從 CSV 導入數據,其收集日期為未來 7 天或更短。 所以今天是 17/08,因此我只想從 17/08 到 24/08 之間的 CSV 中提取數據。

盡管如果你告訴它,Powershell 可以處理英國格式的日期時間對象,但我似乎無法操縱日期以添加 7 天。

這是我當前的代碼:

$today = Get-Date
$thisWeek = $today.AddDays(7)
$thisWeekString = $thisWeek.ToString()
$dateParts = $thisweekString -split " "
$weekFinal = $dateParts[0]

$import = Import-Csv @("\\location\EmailCSV.csv") | Where-Object {$_.collectionDate -lt $weekFinal}

Powershell 正確地將 7 天添加到日期時間以使其成為 24/08,然后將其轉換為字符串並從中刪除時間時,它正確地將該變量設置為 24/08/2018。 但是當我在導入 cmdlet 中比較它們時,它只返回 CSV 中的所有數據,而不是小於 24/08 的日期。

我也知道 Powershell 可以比較這些,因為如果我創建一個單獨的變量 $otherDate,其中包含 24/08/2018,然后創建一個 if 語句來檢查 $weekFinal 是大於還是小於 $otherDate,它會正確運行該語句當真。

我嘗試在 Import-Csv cmdlet 中同時使用 Where 和 Where-Object,但都返回了相同的結果。

如何讓 Powershell 正確比較 $_.collectionDate 和 $weekFinal 以過濾從 csv 導入的數據?

使用[datetime]實例執行所有計算和比較最簡單的 - 避免字符串操作(將日期的字符串表示形式轉換為[datetime]實例除外)。

首先,將今天的日期和從現在起 1 周的日期表示為沒有時間組件的[datetime]實例:

$today = (Get-Date).Date  # Today's date, without a time component (midnight)
$oneWeekFromToday = $today.AddDays(7)

然后使用[datetime]::Parse()將感興趣的總是字符串類型的 CSV 列值轉換為[datetime]實例,以便您可以執行適當的日期比較。

$import = Import-Csv \\location\EmailCSV.csv | Where-Object { 
  $thisDate = [datetime]::Parse($_.collectionDate)
  # Process this row if its date falls between today and 1 week from now, inclusively.
  $thisDate -ge $today -and $thisDate -le $oneWeekFromToday
}

重要提示使用[datetime]::Parse('...') ,而不是[datetime] '...' cast ,因為只有[datetime]::Parse()尊重當前文化的日期和時間格式; 按照設計,PowerShell 的強制轉換和字符串插值始終使用不變文化,而不管當前的文化如何 - 有關更多信息,請參閱我的這個答案

嘗試在比較中將字符串轉換為[datetime] 當使用一組樣本數據時,我能夠得到預期的結果。

$import = Import-Csv @("\\location\EmailCSV.csv") | Where-Object {[datetime]$_.collectionDate -lt [datetime]$weekFinal}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM