从" yyyymmdd"更改日期格式到" mm / dd / yyyy"

时间:2016-04-12 01:32:38

标签: powershell powershell-v3.0

我尝试了很多不同的方式,但我似乎无法做到这一点。

这是我到目前为止所尝试的代码......

[String]$dateValue = '20161212'
[String]$dateStamp = $dateValue -f (Get-Date)
[String]$dateStamp2 = ([datetime]::parseexact($dateValue, "yyyyMMdd", [System.Globalization.CultureInfo]::InvariantCulture)).Date
[String]$dateStamp3 = ([datetime]::FromFileTime($dateValue)).ToString('g')

Write-Host '$dateStamp  = ' $dateStamp
Write-Host '$dateStamp2 = ' $dateStamp2
Write-Host '$dateStamp3 = ' $dateStamp3

当前代码输出

$dateStamp = 20161212
$dateStamp2 = 12/12/2016 00:00:00
$dateStamp3 = 12/31/1600 5:00 PM

期望的代码输出

$dateStamp = 12/12/2016

任何想法?

2 个答案:

答案 0 :(得分:6)

一旦你有了一个datetime对象,很容易将它转换成你需要的任何字符串格式。第二次尝试你是如此接近。添加ToString允许您指定字符串格式。

([datetime]::parseexact($dateValue, "yyyyMMdd", [System.Globalization.CultureInfo]::InvariantCulture)).ToString("dd/MM/yyyy")

答案 1 :(得分:1)

鉴于你有一个文化不变的字符串作为输入,并且你想要一个固定的输出格式,你也可以执行字符串解析,而不需要转换为中间[datetime]实例:

> '20161213' -replace '\d{2}(\d{2})(\d{2})(\d{2})', '$2/$3/$1'
12/13/16

请注意,我已将当天更改为与月份不同,以更好地突出显示重新格式化。

但一般情况下,Nick's helpful answer中展示的基于[datetime]的方法可为您提供最大的灵活性。