Powershell получить дату из файла журнала - PullRequest
0 голосов
/ 22 марта 2020

Я хотел бы получить дату из текста файла журнала.

Текст в файле журнала.

Код ошибки. 200105. Простой текст и т. Д. -------------> дата должна быть 2020 г. Янв 05

Код ошибки. 2000207. Простой текст и т. Д. -------------> он должен получить дату как 2020 Feb 07

Я пробую это, но это не работает. -Дата "200105" -формат "ymd", но он не работает.

Я также пытаюсь "200105" | Дата, но все та же проблема

Это работает [datetime] :: ParseExact ("120105", "ymd", $ null), но как мне получить только дату, но игнорировать весь другой текст

Ответы [ 3 ]

0 голосов
/ 22 марта 2020

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

$date = [datetime]::ParseExact($text2, "y.M.d", $null)

$date | Get-Date -Format dd-MMMM-yyyy

или

$date.ToString("yyyy MMMM dd")
0 голосов
/ 22 марта 2020

Ваш второй пример 2000207 недопустим из-за лишних 0.

Я бы использовал здесь метод TryParseExact, чтобы увидеть, действительно ли то, что вы получили, является парсируемой строкой datetime.

$logLine = 'Error code. 200105. Simple text and so on'
if ($logLine -match '^Error code\s*\.?\s*(\d{6})') {
    $date = Get-Date    # any valid DateTime object will do
    if ([datetime]::TryParseExact($Matches[1], 'yyMMdd', [cultureinfo]::InvariantCulture, 0, [ref]$date)) { 
        # do something with the date found. For demo, just output in the console
        "Found a date: $date" 
    }
}

Вы, вероятно, построчно читаете файл журнала, что-то вроде:

Get-Content -Path 'TheLogFile' | ForEach-Object {
    if ($_ -match '^Error code\s*\.?\s*(\d{6})') {
        $date = Get-Date    # any valid DateTime object will do
        if ([datetime]::TryParseExact($Matches[1], 'yyMMdd', [cultureinfo]::InvariantCulture, 0, [ref]$date)) { 
            # do something with the date found. For demo, just output in the console
            "Found a date: $date" 
        }
    }
}
0 голосов
/ 22 марта 2020

Согласно документации , Get-Date преобразует строку в дату, если она распознает формат даты из настроек локали.

Например, в Великобритании он распознает Get-Date «2020/03/21», но не Get-Date «20200321»

Строка форматирования используется только для форматирования текущей даты.

Это работает: количество символов в строке формата представляет размер ввода (соответствует количеству цифр в дне и году - это сложнее для месяцев), а M представляет месяцы (m представляет минуты ).

PS /home/alistair> [datetime]::ParseExact("200321","yyMMdd",$null)    

Суббота, 21 марта 2020 г. 00: 00: 00

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