2017-02-02 11 views
1

У меня есть список массив, который содержит строку, как нижеКак преобразовать массив строк с датами, как 20.02.2017 в формат YYyyMmDd в PowerShell

17.2.2017 28.2.2017 1.3.2017

Я хотел бы преобразовать это в формат yyyyMMdd, чтобы сравнить эти даты с текущей датой. Я попытался использовать ParseExact, но это не сработало.

`

+0

Вы обычно получаете лучшие ответы, если вы вставляете именно то, что вы сделали * *, а именно то, что произошло * * (включая сообщения об ошибках), а не просто сказать «это не работает». –

+0

FWIW, не ясно, начинаете ли вы с строки, содержащей несколько дат; массив строк, содержащий несколько дат; массив строк, каждый из которых содержит одну дату; arraylist строк, каждый из которых содержит несколько дат; или arraylist строк, каждый из которых содержит одну дату. Включение кода типа '$ dates =" 17.2.2017 "," 28.2.2017 "," 11.03.2017 "' устранит все сомнения и приведет к ответам, которые на самом деле * ответят на вопрос, а не просто приблизиться к ответу , –

+0

@ MikeSherrill'CatRecall 'отредактировал мой вопрос с кодом и скриншотом excel – irish

ответ

1
#you can format string to date like this 
[DateTime]::ParseExact("17.2.2017", 'd.M.yyyy', $null) 

#for your string with all dates 
$dates="17.2.2017 28.2.2017 11.03.2017" 
-split $dates | %{[System.DateTime]::ParseExact($_, 'd.M.yyyy', $null)} 
1

Может зависеть от вашей местности, но начинать с чего-то вроде:

$d,$m,$y = "28.2.2017" -split "\." 
$date = [DateTime]::Parse($("{0}/{1}/{2}" -f $m, $d, $y)) 
$date.ToString("yyyyMMdd") 

Регулировка по мере необходимости потреблять ваш массив.

0

Вы можете попробовать:

$a ="17.2.2017 28.2.2017 1.3.2017" 
$a -split ' ' | % {$b = $_ -split '\.'; Get-Date -Day $b[0] -Month $b[1] -Year $b[2]} 

Если у вас есть массив дат вы просто удалить первый раскол:

$a ="17.2.2017","28.2.2017","1.3.2017" 
$a | % {$b = $_ -split '\.'; Get-Date -Day $b[0] -Month $b[1] -Year $b[2]} 

Только на одну дату:

$a ="17.2.2017" 
$b = $a -split '\.' 
$date = Get-Date -Day $b[0] -Month $b[1] -Year $b[2]} 
$sate.ToString("yyyyMMdd") 
+0

Спасибо, как я делаю то же самое, если все мои даты хранятся в массиве, говорят, что $ AllDates и я хотел бы поместить их в формат yyyymmdd ex: 20170217. – irish

+0

Я редактирую свой ответ. – JPBlanc

+0

Извините, но где вызов? – JPBlanc

0
$d,$m,$y='28.2.2017'.split('.') 
'0'*(4-$y.length)+$y+'0'*(2-$m.length)+$m+'0'*(2-$d.length)+$d 
0

Это то, что я сделал & Это работает.

$Date1 = -split $Date | %{[System.DateTime]::ParseExact($_, 'd.M.yyyy', $null)} $Date2 = $Date1.ToString("yyyyMMdd")