2016-08-02 167 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将始终采用日期时间格式,除非您之后将其转换为字符串,但将失去执行日期时间功能的能力 - 添加日期等...