Powershell将字符串转换为日期时间

Sil*_*bob 17 powershell datetime

我正在使用powershell尝试将字符串转换为日期时间.应该很容易吗?

我从csv导入获取字符串,它的格式为Jul-16.我已经尝试了多种方式将它变成我想要的格式yyyy-MM-dd,我现在正在以下.

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

但我得到错误:

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

我错过了什么吗?

Chr*_*ent 27

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

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

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

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

克里斯

  • 如果输入采用已知的标准格式,则可以使用 Parse 而不是 ParseExact,而无需提供格式。 (3认同)

Tol*_*lga 11

您可以简单地将字符串转换为 DateTime:

[DateTime]"2020-7-16"
Run Code Online (Sandbox Code Playgroud)

或者

[DateTime]"Jul-16"
Run Code Online (Sandbox Code Playgroud)

或者

$myDate = [DateTime]"Jul-16";
Run Code Online (Sandbox Code Playgroud)

您可以通过执行以下操作来格式化生成的 DateTime 变量:

'{0:yyyy-MM-dd}' -f [DateTime]'Jul-16'
Run Code Online (Sandbox Code Playgroud)

或者

([DateTime]"Jul-16").ToString('yyyy-MM-dd')
Run Code Online (Sandbox Code Playgroud)

或者

$myDate = [DateTime]"Jul-16";
'{0:yyyy-MM-dd}' -f $myDate
Run Code Online (Sandbox Code Playgroud)


Mat*_*sen 5

您需要指定它已经具有的格式,以便对其进行解析:

$InvoiceDate = [datetime]::ParseExact($invoice, "dd-MMM-yy", $null)
Run Code Online (Sandbox Code Playgroud)

现在,您可以按照所需的格式输出它:

$InvoiceDate.ToString('yyyy-MM-dd')
Run Code Online (Sandbox Code Playgroud)

要么

'{0:yyyy-MM-dd}' -f $InvoiceDate
Run Code Online (Sandbox Code Playgroud)


Ste*_*Ste 5

Chris Dents 的回答已经涵盖了操作员的问题,但鉴于这是谷歌上的热门搜索,PowerShell format string as date我想我会给出一个不同的字符串示例。


如果像我一样,你会得到这样的时间字符串20190720170000.000000+000

需要注意的重要一点是,您需要ToUniversalTime()在使用时使用[System.Management.ManagementDateTimeConverter],否则您的输入会出现偏移时间。

PS代码

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)
Run Code Online (Sandbox Code Playgroud)

输出

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
Run Code Online (Sandbox Code Playgroud)

MS 文档[Management.ManagementDateTimeConverter]

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