Eu sunt, folosind PowerShell script-ul pentru a converti o .CSV prime fișier de date mai ușor de gestionat în format de date cu coloane separate, un aspirator de vedere etc. Și deoarece fișierul sursă cu datele brute este în NOI, data și formatul de timp (de exemplu, 11/23/21, 1:00 PM), apoi, dacă PC-ul este în același NE-a format de procesul de conversie ruleaza perfect ca ar trebui cu 0 erori. DAR, dacă PC-ul este într-o altă țară, format dată și oră, apoi PowerShell arată erori în roșu în acest proces.
Atunci când PC-ul este în alt format DateTime vad ca principala eroare este:
"Analiza" cu "1" argument(e): "String nu a fost recunoscut ca valabil DateTime."
Și problema este la PC-ul în cazul în care acesta va fi folosit nu este în NOI format (schimbat numai la NOI format pentru testare), deci ar putea cineva de aici te rog ajută-mă pentru a adăuga la procesul de conversie sintaxa sau propoziție/s să specificați pur și simplu direct în cod un format fix, care ține un statice de ieșire format independent despre PC-ul ceas format dată și oră, și dacă una din intrările în fișierul este "11/23/21, 1:00 PM", apoi să specificați în codul vrei ieșire în formatul "dd-MMM-yyyy hh:mm" pentru a avea un rezultat de genul "23-Nov-2021 01:00 PM"
Secțiunea de cod în script folosit pentru conversie este:
…
$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
…
Exemplu de materii prime sursa de date (în fișier CVS sunt zeci de linii, cum ar fi cea următoare):
...(DTRE|49.0|48.2);...;11/23/21, 12:58 PM...;
...(DTRE|52.1|52.0);...;11/23/21, 1:00 PM...;
...
...
Și de Ieșire arată astfel:
Am incercat cu DateTime exemple în alte posturi de aici (stackoverflow.com) pentru a regla cod pentru a lucra într-un PC, fără a NE data și formatul de timp și pentru a obține format DateTime rezultatul descris mai sus. Exemple cum ar fi:
'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))
…
Dar cu aceste exemple PowerShell arată eroare "nu se Poate lega argument pentru parametrul 'InputObject' pentru că aceasta este nulă"
Update după răspunsul de la @Seth:
Atunci când încearcă următoarea modificare a codului, cu PC-ului de sistem format dată în "24-Nov-21" și lăsând restul ca mai sus:
…
$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
sau, de exemplu, la cultura numelees-ES
sau ceva similar", adică a fi specificată direct în cod ca un universal/mod generic în cazul în care aceasta funcționează indiferent dacă PC-ul este în limba engleză, format dată și oră, sau dacă PC-ul este în limba spaniolă, format dată și oră, sau dacă PC-ul este în limba franceză, format dată și oră