Глядя на ваш код, вы хотите преобразовать строки даты в CSV, записанные в формате dd/MM/yyyy HH:mm:ss
, в Unix отметки времени с добавленным значением $CEST
часового пояса.
Вместо повторения той же длинной конструкции , Я бы рекомендовал использовать для этого небольшую вспомогательную функцию:
function Get-TimeStamp ([string]$dateString, [int]$offset = 0) {
if (![string]::IsNullOrWhiteSpace($dateString)) {
$epoch = [DateTime]::new(1970, 1, 1, 0, 0, 0, 0, 'Utc')
$date = Get-Date ([datetime]::ParseExact($dateString, 'dd/MM/yyyy HH:mm:ss', $null))
$diff = (Get-Date $date).ToUniversalTime() - $epoch
return [int64]([Math]::Floor($diff.TotalSeconds) + $offset)
# OR use the -UFormat way like
# $date = Get-Date ([datetime]::ParseExact($dateString, 'dd/MM/yyyy HH:mm:ss', $null)).toUniversalTime() -UFormat '%s'
# return [int64]$date + $offset
}
}
Ниже этой функции код будет выглядеть так:
$CEST = 7200
Import-Csv -Path "D:\1.csv" -Delimiter ';' | Select-Object -SkipLast 2 | ForEach-Object {
[PsCustomObject] @{
'Scheduled Start Date' = Get-TimeStamp $_.'Scheduled Start Date' $CEST
'Scheduled End Date' = Get-TimeStamp $_.'Scheduled End Date' $CEST
'Actual Start Date' = Get-TimeStamp $_.'Actual Start Date' $CEST
'Actual End Date' = Get-TimeStamp $_.'Actual End Date' $CEST
}
} | Export-Csv -Path "D:\1_tmp.csv" -Delimiter ';' -NoTypeInformation