Как получить формат creationtime.month, состоящий из двух цифр вместо одного? - PullRequest
1 голос
/ 03 апреля 2019

У меня есть скрипт, который берет дату создания файла и вставляет ее в тег 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 ]

4 голосов
/ 03 апреля 2019

Следующее должно работать, если вам не нужна каждая часть даты и времени как отдельная переменная:

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

Я не знаю, почему метод toString() ранее не работал для вас, если вы не указали содержимое в скобках. Метод не всегда требует входной аргумент, но для того, что вы пытаетесь, требуется передать ему строку.

1 голос
/ 03 апреля 2019

Вы строите это трудным путем.Форматирование даты и времени в виде строк полностью объясняется здесь: https://ss64.com/ps/syntax-dateformats.html

Более простой способ сделать это и быстрее, так как прямо сейчас вы получаете информацию о файле 6 раз прямо сейчас, будет использовать встроенныйв [datetime] method ToString().

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

Обратите внимание, что я использовал свойство CreationTimeUtc вместо CreationTime, так как "Z" в конце создаваемой строки указывает, чтоэто время в UTC («Z» означает зулусское время , как объяснено в Wikipedia ).

0 голосов
/ 03 апреля 2019

К дополнению Полезный ответ TheMadTechnician :

За исключением T, разделяющего части даты и времени и субсекундный компонент, ваш формат такой же, как и стандартный u формат даты / времени :

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

Если вам нужен явно субсекундный компонент с нулевым значением, добавьте -replace 'Z$', '.00Z' - обратите внимание на использование ., а не :, в качестве разделителя, поскольку обычно используется ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...