Sto utilizzando PowerShell con uno script per convertire un .CSV file di dati raw in più gestibile formato dati con colonne separate, un pulitore di vista etc. E perché il file di origine con i dati grezzi è in NOI formato di data e ora (ad esempio 11/23/21, 1:00 PM), quindi se il PC è nello stesso formato di stati UNITI il processo di conversione funziona perfettamente come dovrebbe con 0 errori. MA, se il PC è in un paese diverso formato di data e ora, quindi PowerShell mostra gli errori in rosso nel processo.
Quando il PC è in un altro formato di data e ora vedo il principale errore è:
"Analizzare" con "1" argomento(i): "Stringa non riconosciuta come DateTime valido."
E il problema è il PC su cui verrà utilizzato non è in NOI formato (solo cambiato a NOI formato per il test), quindi potrebbe qualcuno per favore mi aiuti a aggiungere al processo di conversione di sintassi o frase/s semplicemente specificare direttamente nel codice un formato fisso che tiene statico formato di output in modo indipendente sull'orologio del PC formato di data e ora, e se uno degli ingressi nel file è “11/23/21, 1:00”, quindi specificare il codice si desidera che l'output nel formato “gg-MMM-aaaa hh:mm” per avere un risultato come “23-Nov-2021 01:00 PM”
La sezione di codice nello script utilizzato per la conversione:
…
$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
…
Esempio di materie prime di origine dati (il file CVS sono decine di linee, come la prossima):
...(DTRE|49.0|48.2);...;11/23/21, 12:58 PM...;
...(DTRE|52.1|52.0);...;11/23/21, 1:00 PM...;
...
...
E l'Output sarà simile a:
Ho provato con DateTime esempi in altri post qui stackoverflow.com) per regolare il codice per lavorare in un PC senza di NOI formato di data e ora e per ottenere il formato di data e ora risultato sopra descritto. Esempi come:
'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))
…
Ma con questi esempi PowerShell mostra il messaggio di errore “Impossibile associare l'argomento parametro InputObject' perché è null”
Aggiornamento dopo la risposta da @Seth:
Quando cercando prossima modifica del codice, con il sistema del PC formato della data in “24-Nov-21” e lasciando il resto come sopra:
…
$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
o , ad esempio, al nome della culturaes-ES
o qualcosa di simile”, cioè essere specificato direttamente nel codice, come un universale/generico modo in cui questo funziona anche se il PC è in inglese formato di data e ora, o se il PC è in spagnolo formato di data e ora, o se il PC è in francese formato di data e ora