Som pomocou PowerShell skript na konverziu .CSV raw data súbor do viac zvládnuteľnú formát dát s samostatných stĺpcov, čistejšie zobrazenie a pod. A pretože zdrojový súbor s surových dát je v NÁS, formát dátumu a času (napr. 11/23/21, 1:00 HOD.), potom, ak POČÍTAČ je v tom istom NÁM formát konverzie proces funguje perfektne ako by s 0 chyby. ALE, ak POČÍTAČ je v inej krajine, formát dátumu a času, potom PowerShell ukazuje chyby v červenej farbe v procese.
Ak je PC je v iných DateTime formát vidím, hlavná chyba je:
"Analyzovať" s "1" argument(y): "Reťazec nebol uznaný ako platný DateTime."
A problém je na PC, kde to bude možné použiť, nie je v NÁS formáte (iba zmenili k NÁM formát pre testovanie), tak by tu niekto prosím, pomôžte mi pridať k procesu premeny syntaxe alebo vety/s jednoducho zadať priamo v kóde pevný formát, ktorý uchováva statické výstupný formát nezávisle o PC hodiny dátum a formát času, a ak jeden zo vstupov do súboru je "11/23/21, 1:00 PM", potom zadať kód chcete výstup vo formáte "dd-MMM-rrrr hh:mm" mať výsledok, ako napríklad "23-Nov-2021 01:00 PM"
Kód sekcie v skripte používa na konverziu, je:
…
$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
…
Príklad surovín zdroj údajov (v CVS súbor niekoľko desiatok riadkov, ako ďalej):
...(DTRE|49.0|48.2);...;11/23/21, 12:58 PM...;
...(DTRE|52.1|52.0);...;11/23/21, 1:00 PM...;
...
...
A Výstup vyzerá:
Snažil som sa s DateTime príklady v iných príspevkov z tu (stackoverflow.com ak chcete zmeniť kód, ak chcete pracovať v PC bez NÁS, formát dátumu a času a získať DateTime formát výsledok je popísané vyššie. Príklady ako:
'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))
…
Ale tieto príklady PowerShell zobrazuje chyba "Nemôže viazať argument na parameter "InputObject", pretože to je null"
Aktualizácia po odpoveď od @Seth:
Pri pokuse ďalšej úpravy kódu, s PC systémový dátum vo formáte v "24-Nov-21" a zanechania zvyšku, ako je uvedené vyššie:
…
$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
alebo napríklad na kultúru menoes-ES
alebo niečo podobné", t. j. sú uvedené priamo v kóde ako univerzálny/generic cestu tam, kde to funguje, bez ohľadu na to, či POČÍTAČ je v angličtine, formát dátumu a času, alebo ak je PC je v španielčine, formát dátumu a času, alebo, ak POČÍTAČ je vo francúzštine, formát dátumu a času