2016-04-28 185 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 

我敢肯定,有一个更短的正则表达式方法,但那不是我的帽子。