2014-03-28 37 views
2

我有一個文本文件中的日期集合。將datetime的集合轉換爲yyyy-mm-dd

Ex。 file.txt的

2011-01-01 

2011-02-14 

2011-02-21 

2011-03-17 

2011-09-11 

2011-11-11 

我有一個名爲Important-Dates函數持有[datetime]日期

防爆的集合。功能保存這些類型日期

November-11-15 12:00:00 AM 

November-11-14 12:00:00 AM 

November-11-13 12:00:00 AM 

February-14-15 12:00:00 AM 

我想轉換功能日期爲格式yyyy-mm-dd並追加到file.txt的文件

到目前爲止,我有這樣的:

$Dates = Important-Dates 
if (-not (test-path 'file.txt' -pathtype leaf)) 
{ 
"{0:yyyy-MM-dd}" -f $Dates | Set-Content 'file.txt' 
exit 1 
} 
else { 
"{0:yyyy-MM-dd}" -f @($_.$Dates) | Add-Content 'file.txt' 
exit 1 
} 

作爲結果得到的所有File.txt文件是重要日期列表中的第一個日期

"November-11-15 12:00:00 AM" - 它確實轉換爲2015-11-11

我想要所有日期。我做錯了什麼?

回答

1

-f提供集合將僅使用集合中的第一個元素。您想要處理集合中的每個日期對象。

要處理集合中的每個對象,你可以使用foreach-object

$Dates | ForEach-Object -Process { "{0:yyyy-MM-dd}" -f $_ } | set-content 'file.txt' 
} 

...或更簡潔:

$Dates | % { "{0:yyyy-MM-dd}" -f $_ } | Set-Content 'file.txt' 
+0

謝謝!解決了! – learn2code

+0

如果「2011-11-11」在列表中出現兩次,你知道我可以如何消除相同的日期嗎? – learn2code

+0

你不應該在評論中添加問題。請爲此問題創建一個新問題。 –

1

DateTime對象可以通過他們的ToString()方法進行格式化:

$Dates | % { $_.ToString('yyyy-MM-dd') } | Set-Content 'file.txt' 
+0

謝謝。如果「2011-11-11」在文件中出現了兩次,你知道如何消除相同的日期嗎? – learn2code

+0

@ learn2code添加一個過濾器'... |選擇-Unique | ...'。 –