Eu estou usando o PowerShell com um script para converter um .CSV matérias arquivo de dados em mais gerenciável formato de dados com colunas separadas, uma visão mais limpa, etc. E porque o arquivo de origem com os dados brutos, está em NÓS, formato de data e hora (e.g. 11/23/21, 1:00 PM) e, em seguida, se o PC estiver no mesmo formato US o processo de conversão é executado perfeitamente como deveria com 0 erros. MAS, se o PC está em um país diferente formato de data e hora e, em seguida, PowerShell mostra erros em vermelho no processo.
Quando o PC está em outro formato de data / hora que eu vejo o principal erro é:
"Analisar" com "1" argumento(s): "String não foi reconhecida como DateTime válido."
E o problema é o PC onde esta vai ser usado não está em NÓS formato (alterado somente para NÓS formato para testes), assim poderia alguém aqui, por favor, ajude-me a acrescentar para o processo de conversão sintaxe ou frase/s simplesmente especificar diretamente o código de um formato fixo que mantém um estática formato de saída de forma independente sobre o relógio do computador do formato de data e hora, e se uma das entradas para o arquivo é "11/23/21, 1:00", em seguida, especificar o código que você deseja que a saída no formato "dd-MMM-aaaa hh:mm" para ter um resultado como "23-Nov-2021 01:00 PM"
A seção de código no script utilizado para a conversão é:
…
$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
…
Exemplo de matérias de origem de dados (no CVS do arquivo são dezenas de linhas como o próximo):
...(DTRE|49.0|48.2);...;11/23/21, 12:58 PM...;
...(DTRE|52.1|52.0);...;11/23/21, 1:00 PM...;
...
...
E a Saída parece:
Eu tentei com DateTime exemplos em outros posts aqui (stackoverflow.com) para ajustar o código para trabalhar em um PC, sem NÓS, formato de data e hora e, para obter o formato de data / hora resultado descrito acima. Exemplos como:
'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))
…
Mas com esses exemplos PowerShell mostra o erro "não é Possível vincular o argumento para o parâmetro 'InputObject' porque ele é nulo"
Atualização após a resposta do @Seth:
Ao tentar avançar a modificação do código, com o PC formato de data do sistema em "24-Nov-21" e deixando o resto como acima:
…
$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
ou, por exemplo, o nome de culturaes-ES
, ou algo semelhante", isto é, a ser especificada diretamente no código, como um universal/forma genérica, onde este funciona independentemente se o PC está em inglês, formato de data e hora, ou se o PC está em espanhol, formato de data e hora, ou se o PC está em francês, formato de data e hora