2016-08-02 342 views
4

我正在使用powershell來嘗試將字符串轉換爲日期時間。應該很容易吧?Powershell將字符串轉換爲datetime

我正在從csv導入字符串,它的格式爲Jul-16。我已經嘗試了多種方法將其轉換爲我想要的格式,即yyyy-MM-dd,我目前處於以下狀態。

$invoice = $object.'Invoice Month' 
$invoice = "01-" + $invoice 
$invoice = [datetime]::parseexact($invoice, 'yyyy-MM-dd', $null) 

但我得到的錯誤:

String was not recognized as a valid DateTime.

我這麼想嗎?

+0

字符串*的格式爲「Jul-16」所以你爲什麼用'yyyy-MM解析它-dd'而不是'MMM-dd'?你把這個字符串格式化爲'yyyy-MM-dd'會讓你感到困惑。 –

回答

4

ParseExact被告知需要解析的日期的格式,而不是您希望解析的格式。

$invoice = '01-Jul-16' 
[datetime]::parseexact($invoice, 'dd-MMM-yy', $null) 

如果再要輸出的日期字符串:

[datetime]::parseexact($invoice, 'dd-MMM-yy', $null).ToString('yyyy-MM-dd') 

克里斯

1

你需要指定的格式它已經,以分析它:

$InvoiceDate = [datetime]::ParseExact($invoice, "dd-MMM-yy", $null) 

現在您可以輸出您需要的格式:

$InvoiceDate.ToString('yyyy-MM-dd') 

'yyyy-MM-dd' -f $InvoiceDate 
1
$invoice = "Jul-16" 
[datetime]$newInvoice = "01-" + $invoice 

$newInvoice.ToString("yyyy-MM-dd") 

你去那裏,用一種類型的加速器,又融入了新的變種,如果你想在其他地方使用它,使用它像這樣:$newInvoice.ToString("yyyy-MM-dd")$newInvoice將始終採用日期時間格式,除非您之後將其轉換爲字符串,但將失去執行日期時間功能的能力 - 添加日期等...