2016-04-28 435 views
1

我運行一個PowerShell腳本傳遞參數,例如「20160428」PowerShell的 - 格式化日期YYMMDD格式

我需要的是格式爲YYMMDD本(即獲得「160428」的結果)。我可以刪除「20」,但我希望得到這個權利。對於這樣的我這樣做了很多嘗試,如:

#$COBDATE= '{0:yyMMdd}' -f $COBDATE 
#$COBDATE = ([datetime]::ParseExact($COBDATE, "yyMMdd", [System.Globalization.CultureInfo]::InvariantCulture)).DayOfWeek 

,最後一個:

$COBDATE = ("{0:yyMMdd}" -f [datetime]::parse($COBDATE)) 

下面的作品,但一旦我代替我的時間「獲取最新」,「20160428」它只是打印出yyMMdd字符串。

$b = (Get-Date).AddDays(-1).ToString("yyMMdd") 

所以,如果我試試這個:

$input = "20160428" 
$format = "yyMMdd" 
$input_toDate_up = [DateTime]::ParseExact($input, $format, $null).ToString($format) 
$input_toDate_up 

它只是說該字符串不是有效的日期時間,這似乎是根本原因。

請幫忙嗎?

回答

1
$Input = "20160428" 
Get-Date -Year $Input.Substring(0,4) -Month $Input.Substring(4,2) -Day $Input.Substring(6,2) -Format "yyMMdd" 
+0

正如ssaviers提到的,您還應該使用$ Input之外的變量來避免衝突。 – APB

+0

在我的情況下,我添加了將參數轉換爲字符串之前($ cobdate = [string] $ cobdate,但之後,它完美的工作,謝謝! – Tiago

+0

什麼類型之前鑄造到一個字符串?如果$ cobdate已經是一個日期時間對象,你可以簡單地執行Get-Date -Date $ cobdate -Format「yyMMdd」 – APB

1

你與你的例子描述格式yyyyMMdd,不yyMMdd

1

我覺得對於一個$input是保留變量,所以你不應該把它當作什麼都不會真的在那裏工作,你期望的那樣。看到這裏about_Automatic_Variables

我已經用不同的抽象日期格式這個繪製的子串過程。

$dateinput = "20160428" 
$dateformat = "yyMMdd" 

Get-Date($dateinput.Substring(4,2) + "/" + $dateinput.Substring(2,2) + "/" + $dateinput.substring(0,4)) -Format $dateformat 

我敢肯定,有一個更短的正則表達式方法,但那不是我的帽子。