2015-08-04 8 views
1

Может ли кто-нибудь сказать мне, как конвертировать эту дату в дд/мм/гггг.Преобразование даты в формате powershell

Tue Aug 4 17:05:41 2015 

Я пробовал несколько вещей и вариантов, но не повезло.

$a = get-date -UFormat %c 
(get-date $a).ToString("ddMMyyyy") 

Этот DateFormat найден в лог-файл и моя система формата даты и времени в дд/мм/гггг. Я пытаюсь сделать сравнение между ними. Поэтому мне нужно изменить формат даты.

+3

Для сравнения вы должны лучше сравнивать сами объекты DateTime, а не их представления 'toString()'. – Vesper

+0

Спасибо за ваш комментарий. Если возможно, предоставьте мне некоторые сведения об этом. – Ironic

+0

Просто вы создаете объект 'DateTime' из подстроки через' get-date -format 'dd \/MM \/yyyy '', создаете другой объект на основе текущей даты, затем сравните как целые числа. 'if ($ onedate -lt $ twodate) {...}' – Vesper

ответ

5

Ответ от @jisaak является почти пятно на, за исключением того, что дополнительное заполнение пространства в передней части компонента даты («Вт августа 17:05:41 2015») будет вызывать только ошибка при попытке разобрать дату между 10-й и 31-го числа месяца:

PS C:\> [Datetime]::ParseExact('Tue Aug 4 17:05:41 2015', 'ddd MMM d HH:mm:ss yyyy', $us) 

Tuesday, August 04, 2015 5:05:41 PM 


PS C:\> [Datetime]::ParseExact('Tue Aug 11 17:05:41 2015', 'ddd MMM d HH:mm:ss yyyy', $us) 
Exception calling "ParseExact" with "3" argument(s): "String was not recognized as a valid DateTime." 
At line:1 char:1 
+ [Datetime]::ParseExact('Tue Aug 11 17:05:41 2015', 'ddd MMM d HH:mm:ss yyyy', $ ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : FormatException 

Самый простой способ идти об этом, чтобы удалить заполнени пространство как входной строки и строки формата:

function Parse-CustomDate { 
    param(
     [Parameter(Mandatory=$true)] 
     [string]$DateString, 
     [string]$DateFormat = 'ddd MMM d HH:mm:ss yyyy', 
     [cultureinfo]$Culture = $(New-Object System.Globalization.CultureInfo -ArgumentList "en-US") 
    ) 

    # replace double space by a single one 
    $DateString = $DateString -replace '\s+',' ' 

    [Datetime]::ParseExact($DateString, $DateFormat, $Culture) 
} 
+0

Спасибо за ваш ответ. Проголосовал. – Ironic

2

Может быть Примитивный, но делает работу :)

$Date = 'Tue Aug 4 17:05:41 2015' -split "\s" 
$Year = $Date[-1] 
$Time = $Date | ? {$_ -match "..:..:.."} 
$DayName = $Date[0] 
$Day = $Date[3] 
$Month = $Date[1] 

Get-Date "$Month $Day $Year $Time" -Format "ddMMyyy" 

04082015 
+0

Спасибо за ваш ответ, но я не хочу использовать -split. но спасибо. проголосовали. – Ironic

1

Вы можете использовать Datetime ParseExact метод:

$us = New-Object system.globalization.cultureinfo("en-US") 
[Datetime]::ParseExact('Tue Aug 4 17:05:41 2015', 'ddd MMM d HH:mm:ss yyyy', $us) 

Как уже упоминалось Веспер, теперь вы можете сравнивать объекты DateTime.

+0

Это произойдет с 10 по 31 числа каждого месяца из-за двойного пространства перед компонентом даты ('d'). –

0
Get-date -format d 

Это даст вам сегодняшнюю дату, но в mm/dd/yyyy формате. Будьте осторожны, это даст вам string, а не integer.