Скрипт Powershell для изменения существующей даты и добавления к ней 1 часа - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть CSV-файл с одним из заголовков столбцов с именем Timeraised . Я хочу добавить 1 час к датам в этом столбце. Например, если дата в столбце Timeraised равна 09-04-202 05 : 12, то она должна измениться на 09-04-202 06 : 12

Я попробовал приведенные ниже команды, но они просто меняли формат времени.

Import-Csv $ CSVLoc \ Alert.csv | % {$ .TimeRaised = (datetime) .ToString ('дд / мм / гггг ч: мм'); $ } | Export-Csv $ CSVLoc \ alert1.csv -NoTypeInformation

Ответы [ 2 ]

3 голосов
/ 09 апреля 2020

Вы можете сделать следующее:

$_.TimeRaised = ([datetime]$_.TimeRaised).AddHours(1).ToString('dd/MM/yyyy HH:mm')

Сначала приведите полученную строку даты как объект [datetime]. Затем добавьте час, используя AddHours(1). Затем отформатируйте строку даты.

РЕДАКТИРОВАТЬ:

Ваши последующие комментарии показывают другой формат, чем в исходном вопросе. Вы можете проанализировать этот формат и применить те же методы:

$_.TimeRaised = [datetime]::ParseExact($_.TimeRaised,'dd/MM/yyyy HH:mm:ss',[cultureinfo]::InvariantCulture).AddHours(1).ToString('dd/MM/yyyy HH:mm')
0 голосов
/ 09 апреля 2020

Используйте метод stati c [datetime]::ParseExact() для анализа вашей строки в формате dd-MM-yyyy HH:mm, затем добавьте один час с другим методом stati c [datetime]::AddHours(). Я также добавил пропущенный 0 к вашему году, чтобы он стал 09-04-2020 05:12 вместо 09-04-202 05:12. Вы можете использовать [datetime] | Get-Member -Static, чтобы найти эти методы c.

Import-Csv -Path .\data.csv | ForEach-Object {
    $date = [datetime]::ParseExact($_.Timeraised, "dd-MM-yyyy HH:mm", $null)
    [PSCustomObject]@{
        Timeraised = $date.AddHours(1).ToString("dd-MM-yyyy HH:mm")
    }
} | Export-Csv -Path .\output.csv -NoTypeInformation -UseQuotes Never
# Remove -UseQuotes Never if you are not using PowerShell 7

Или с перечислением foreach вместо Foreach-Object:

& {
    foreach ($row in Import-Csv -Path .\data.csv)
    {
        $date = [datetime]::ParseExact($row.Timeraised, "dd-MM-yyyy HH:mm", $null)
        [PSCustomObject]@{
            Timeraised = $date.AddHours(1).ToString("dd-MM-yyyy HH:mm")
        }
    }
} | Export-Csv -Path .\output.csv -NoTypeInformation -UseQuotes Never
# Remove -UseQuotes Never if you are not using PowerShell 7

Что даст следующее выходной CSV:

Timeraised
9/04/2020 6:12

Выше также используются эти командлеты для импорта и экспорта файлов CSV:

Вы также можете ознакомиться с документацией MSDN по вышеуказанным. NET методам:

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