Powershell'i dönüştürmek için bir komut dosyasıyla kullanıyorum .CSV ham veri dosyası, ayrı sütunlar, daha temiz bir görünüm vb. İle daha yönetilebilir veri formatına dönüştürülür. Ve ham verilere sahip kaynak dosya ABD tarih ve saat biçiminde olduğundan (örneğin 11/23/21, 1: 00 PM), PC aynı ABD biçimindeyse, dönüştürme işlemi 0 hatalarında olması gerektiği gibi mükemmel şekilde çalışır. ANCAK, bilgisayar farklı bir ülke tarih ve saat biçimindeyse, PowerShell işlemdeki hataları kırmızı renkte gösterir.
Bilgisayar başka bir DateTime biçiminde olduğunda, ana hatanın şu olduğunu görüyorum:
"1 "bağımsız değişkeni(ler) ile" Ayrıştırma": "Dize geçerli bir tarih zamanı olarak tanınmadı."
Ve sorun (test biçimi BİZE sadece değişen), işte sözdizimi veya cümle/sadece doğrudan kod içinde statik bir çıkış PC saat tarih ve saat biçimi hakkında bağımsız biçim tutar sabit bir biçim belirtmek için dönüştürme işlemi için ekleyin bana yardım edin lütfen biri olabilir, ve dosyanın içine girdi 11/23/21 ise “1:Bu kullanılacak PC format içimizde değil 00 PM” i belirtmek kodu istediğiniz çıktı biçimini “dd-MMM-yyyy hh:mm” için bir sonuç gibi “23-Nov-2021 01:00 PM”
Dönüştürme için kullanılan komut dosyasındaki kod bölümü şöyledir:
…
$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
…
Ham kaynak veri örneği (CVS dosyasında bir sonrakine benzer düzinelerce satır vardır):
...(DTRE|49.0|48.2);...;11/23/21, 12: 58 PM...;
...(DTRE|52.1|52.0);...;11/23/21, 1: 00 PM...;
...
...
Ve Çıkış gibi görünüyor:
Buradan diğer yayınlarda DateTime örnekleriyle denedim (stackoverflow.com) kodu, ABD tarih ve saat biçimi olmayan bir bilgisayarda çalışacak şekilde ayarlamak ve yukarıda açıklanan DateTime biçimi sonucunu elde etmek. Aşağıdaki gibi örnekler:
'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))
…
Ancak bu örneklerle PowerShell, “Null olduğu için bağımsız değişkeni 'InputObject' parametresine bağlayamıyor " hatasını gösterir”
@Seth'den gelen cevaptan sonra güncelleme:
Kodun bir sonraki değişikliğini denerken, PC sistem tarih formatı "24-Nov-21" ile ve geri kalanını yukarıdaki gibi bırakarak:
…
$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
veya örneğin kültür adınaes-ES
veya benzer bir şey", yani PC'nin ingilizce tarih ve saat biçiminde olup olmadığına veya PC'nin ispanyolca tarih ve saat biçiminde olup olmadığına veya PC'nin Fransızca tarih ve saat biçiminde olup olmadığına bakılmaksızın, bunun çalıştığı evrensel / genel bir yol olarak doğrudan kodda belirtilmesi