Я использую PowerShell со сценарием для преобразования файла необработанных данных .CSV в более удобный формат данных с отдельными столбцами, более чистым представлением и т. Д. И поскольку исходный файл с необработанными данными находится в формате даты и времени США (например, 23.11.2011, 1:00 вечера), то, если компьютер находится в том же формате США, процесс преобразования выполняется идеально, как и должно быть, с 0 ошибками. НО если компьютер находится в другом формате даты и времени страны, то PowerShell показывает ошибки красным цветом в процессе.
Когда компьютер находится в другом формате даты и времени, я вижу, что основная ошибка заключается в:
"Синтаксический анализ" с аргументом(ами) "1": "Строка не была распознана как допустимая дата-время".
И проблема в ПК, где они будут использоваться не в американском формате (только поменяли нам формат для тестирования), так что может тут кто-то пожалуйста, помогите мне, чтобы добавить в процесс преобразования синтаксиса предложения/s, чтобы просто указать непосредственно в коде фиксированный формат, что держит статические формат вывода самостоятельно о ПК часы формат даты и времени, и если один из входов в файл “11/23/21, 1:00 ПМ”, а затем указать код, который вы хотите вывод в формате “ДД-МММ-гггг чч:мм” , чтобы иметь результат, как “23-ноября-2021 01:00 часов”
Раздел кода в скрипте, используемом для преобразования, является:
…
$data = $csvData | ? {$_ -match "\(DTRE"}
dtreFileData = New-Object System.Collections.Generic.List[PSCustomObject]
foreach ($item in $data)
{
$null = $item.Strategy -match "\(DTRE\|(.*)\)"
$v = $Matches[1] -split '\|'
$resultvalue = $v[0] | Convert-CurrencyStringToDecimal
$expectedvalue = $v[1] | Convert-CurrencyStringToDecimal
$dtreData = [PSCustomObject]@{
'DateTime' = ([datetime]::Parse($item.'Date/Time'))
'ResultValue' = [decimal]$resultvalue
'ExpectedValue' = [decimal]$expectedvalue
}
$null = $dtreFileData.Add($dtreData)
$null = $dtreAllData.Add($dtreData)
}
$dtreFileData | Export-Csv -Path (Join-Path (Split-Path -Path $f -Parent) ($outFile + '.csv')) -Force -NoTypeInformation -Encoding ASCII
…
Пример необработанных исходных данных (в файле CVS десятки строк, подобных следующей):
...(DTRE|49.0|48.2);...;11/23/21, 12:58 ПМ...;
...(DTRE|52.1|52.0);...;11/23/21, 1:00 ПМ...;
...
...
И результат выглядит так:
Я пробовал использовать примеры DateTime в других сообщениях отсюда (stackoverflow.com) настроить код для работы на ПК без использования формата даты и времени и получить результат в формате даты и времени, описанный выше. Примеры, такие как:
'DateTime' = ([datetime]::Parse($item.'yyyy-MM-dd:HH:mm:ss'))
'DateTime' = ([datetime]::ParseExact($item.'yyyy-MM-dd:HH:mm:ss'))
…
$culture = [Globalization.CultureInfo]::InvariantCulture
…
'DateTime' = ([datetime]::ParseExact($item.'yyyy-MM-dd:HH:mm:ss', $culture))
…
Но в этих примерах PowerShell показывает ошибку “Невозможно привязать аргумент к параметру 'InputObject', потому что он равен нулю”.
Обновление после ответа от @Seth:
При попытке следующей модификации кода, с форматом системной даты ПК в “24-21 ноября” и оставляя остальное, как указано выше:
…
$resultvalue = $v[0] | Convert-CurrencyStringToDecimal
$expectedvalue = $v[1] | Convert-CurrencyStringToDecimal
$cultureInfo= New-Object System.Globalization.CultureInfo("es-ES")
$dtreData = [PSCustomObject]@{
'DateTime' = ([System.DateTime]::Parse($item.'Date/Time', $cultureInfo))
'ResultValue' = [decimal]$resultvalue
'ExpectedValue' = [decimal]$expectedvalue
…
dd-MMM-yyyy hh:mm
, или, например, к названию культурыes-ES
, или что-то подобное”, т. е. указывается непосредственно в коде как универсальный/универсальный способ, где это работает независимо от того, находится ли компьютер в формате даты и времени на английском языке, или если компьютер находится в формате даты и времени на испанском языке, или если компьютер находится во французском формате даты и времени