如何获取creationtime.month的格式为两位数而不是单数?

时间:2019-04-03 17:16:54

标签: powershell

我有一个脚本,该脚本采用文件的创建日期并将其注入xml标记中。一切正常,但日期格式显示为2019-4-3,我需要格式为2019-04-03。

我尝试过'tostring(MM)',但对我而言无效。有人有想法么?这是我认为问题所在的代码段。如果有人想看的话,我可以发布整个脚本。

$filename="C:\Users\Public\file.xml"
$filename2="C:\Users\Public\file2.xml"


$month = (Get-ChildItem $filename).CreationTime.Month 
$day = (Get-ChildItem $filename).CreationTime.Day
$year = (Get-ChildItem $filename).CreationTime.Year
$hour = (Get-ChildItem $filename).CreationTime.Hour
$min = (Get-ChildItem $filename).CreationTime.Minute
$sec= (Get-ChildItem $filename).CreationTime.Second


$output=[string]$year+"-"+[string]$month+"-"+[string]$day+"T"+[string]$hour+":"+[string]$min+":"+[string]$sec+":00z"

Write-Host $output

日期的输出是个位数,我需要它们是两位数。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

假设您实际上不需要将日期时间的每个部分作为一个单独的变量,那么以下内容应该可以工作:

$filename="C:\Users\Public\file.xml"
(Get-ChildItem $filename).creationtime.toString('yyyy-MM-ddTHH:mm:ss')+':00z'

我不知道为什么toString()方法以前对您不起作用,除非您没有在括号内引用内容。该方法并不总是需要输入参数,但是您尝试使用的方法需要将字符串传递给它。

答案 1 :(得分:1)

您正在艰难地构建这种方式。将日期和时间格式化为字符串的方式在此处进行了详细说明:https://ss64.com/ps/syntax-dateformats.html

一种更简单的方法,并且因为现在您现在已经六次获取文件信息,所以速度更快,那就是使用内置的[datetime]方法ToString()

(Get-Item $filename).CreationTimeUtc.ToString("yyyy-MM-ddTHH:mm:ss.00Z")

请注意,我使用了CreationTimeUtc属性而不是CreationTime,因为要创建的字符串末尾的“ Z”表示这是UTC时间(“ Z”表示祖鲁时间,如Wikipedia中所述)。

答案 2 :(得分:0)

互补 TheMadTechnician's helpful answer

除了T分隔日期和时间部分以及不足一秒的部分外,您的格式与standard u date/time format相同:

PS> (Get-Item /).CreationTimeUtc.ToString('u') -replace ' ', 'T'
2018-11-30T10:47:40Z

如果您需要显式的零值亚秒级分量,请附加-replace 'Z$', '.00Z'-注意使用.而不是:作为分隔符,因为.通常使用。