在PowerShell中将字符串转换为datetime

时间:2016-08-02 10:06:48

标签: powershell datetime

我正在使用PowerShell尝试将字符串转换为日期时间。它应该很简单,对吧?

我从CSV导入中获取字符串,其格式为Jul-16。我已经尝试了多种方法将其变为我想要的格式yyyy-MM-dd,我目前在以下。

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

但我收到错误:

  

字符串未被识别为有效的DateTime。

我错过了什么吗?

6 个答案:

答案 0 :(得分:20)

ParseExact被告知要解析的日期格式,而不是你想要的格式。

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

如果您希望输出日期字符串:

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

克里斯

答案 1 :(得分:4)

你需要指定它已经有的格式,以便解析它:

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

现在您可以以您需要的格式输出它:

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

'{0:yyyy-MM-dd}' -f $InvoiceDate

答案 2 :(得分:2)

$invoice = "Jul-16"
[datetime]$newInvoice = "01-" + $invoice

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

你去,使用类型加速器,但也使用新的var,如果你想在别处使用它,就像这样使用它:$newInvoice.ToString("yyyy-MM-dd")因为$newInvoice将始终采用日期时间格式,除非你之后将其转换为字符串,但将失去执行日期时间功能的能力 - 添加天数等......

答案 3 :(得分:2)

Chris Dents的答案已经涵盖了OP的问题,但是看到这是Google在 [Desktop Entry] ... StartupWMClass=Firefox StartupNotify=true 上的热门搜索,我想我会举一个不同的字符串示例。


如果像我一样,您将获得类似PowerShell format string as date

的时间字符串

要注意的重要一点是,在使用20190720170000.000000+000时需要使用ToUniversalTime(),否则您的输入会有偏移时间。

PS代码

[System.Management.ManagementDateTimeConverter]

输出

cls
Write-Host "This example is for the 24hr clock with HH"
Write-Host "ToUniversalTime() must be used when using [System.Management.ManagementDateTimeConverter]"
$my_date_24hr_time   = "20190720170000.000000+000"
$date_format         = "yyyy-MM-dd HH:mm"
[System.Management.ManagementDateTimeConverter]::ToDateTime($my_date_24hr_time).ToUniversalTime();
[System.Management.ManagementDateTimeConverter]::ToDateTime($my_date_24hr_time).ToUniversalTime().ToSTring($date_format)
[datetime]::ParseExact($my_date_24hr_time,"yyyyMMddHHmmss.000000+000",$null).ToSTring($date_format)
Write-Host
Write-Host "-----------------------------"
Write-Host
Write-Host "This example is for the am pm clock with hh"
Write-Host "Again, ToUniversalTime() must be used when using [System.Management.ManagementDateTimeConverter]"
Write-Host
$my_date_ampm_time   = "20190720110000.000000+000"
[System.Management.ManagementDateTimeConverter]::ToDateTime($my_date_ampm_time).ToUniversalTime();
[System.Management.ManagementDateTimeConverter]::ToDateTime($my_date_ampm_time).ToUniversalTime().ToSTring($date_format)
[datetime]::ParseExact($my_date_ampm_time,"yyyyMMddhhmmss.000000+000",$null).ToSTring($date_format)

This example is for the 24hr clock with HH ToUniversalTime() must be used when using [System.Management.ManagementDateTimeConverter] 20 July 2019 17:00:00 2019-07-20 17:00 2019-07-20 17:00 ----------------------------- This example is for the am pm clock with hh Again, ToUniversalTime() must be used when using [System.Management.ManagementDateTimeConverter] 20 July 2019 11:00:00 2019-07-20 11:00 2019-07-20 11:00 上的MS文档:

https://docs.microsoft.com/en-us/dotnet/api/system.management.managementdatetimeconverter?view=dotnet-plat-ext-3.1

答案 4 :(得分:1)

您只需将字符串转换为DateTime:

yarn start

[DateTime]"2020-7-16"

[DateTime]"Jul-16"

您可以通过执行以下操作来格式化结果DateTime变量:

$myDate = [DateTime]"Jul-16";

'{0:yyyy-MM-dd}' -f [DateTime]'Jul-16'

([DateTime]"Jul-16").ToString('yyyy-MM-dd')

答案 5 :(得分:0)

希望下面有帮助!

PS C:\Users\aameer>$invoice = $object.'Invoice Month'
$invoice = "01-" + $invoice
[datetime]$Format_date =$invoice

现在类型已转换。您可以使用method或可以访问任何属性。

Example :$Format_date.AddDays(5)