ฉันกำลังใช้ PowerShell กับสคริปต์ที่จะแปลงมี.แฟ้ม csv ดิบข้อมูลของแฟ้มเข้าไปมากก manageable รูปแบบข้อมูลแยกกับคอลัมน์เป็นเครื่องมือทำความสะอาดมุมมองเป็นต้น แล้วเพราะแฟ้มต้นทางกับข้อมูลอยู่ในพวกเราวันและเวลารูปแบบ(e.g. 11/23/21,1:00 PM)แล้วถ้าผู้พิวเตอร์อยู่ในที่เดียวกันพวกเรารูปแบบในการแปลงโพรเซสทำงานดีเท่าที่ควรกับ 0 เกิดข้อผิดพลาด. แต่ถ้าผู้พิวเตอร์คือในมุมมองที่ต่างออกประเทศวันที่และเวลาแบบนั้น PowerShell แสดงข้อผิดพลาดในสีแดงอยู่ในระหว่างการโจรกรรม
ตอนที่พิวเตอร์อยู่ในอีก DateTime รูปแบบฉันเห็นหลักเกิดข้อผิดพลาดคือ:
"การวิเคราะห์"กับ"1"เถียงกัน(วินาที):"ข้อความไม่จำเป็นที่ใช้งานได้ DateTime."
และปัญหาคือคนพิวเตอร์อยู่ไหนเรื่องนี้จะถูกใช้ไม่ได้อยู่ในพวกเรารูปแบบ(เดียวที่เปลี่ยนให้พวกเรารูปแบบสำหรับการทดสอบ)ดังนั้นเป็นไปได้มั้ยที่ใครบางคนจะได้ที่นี่โปรดช่วยฉันด้วยที่อยากจะเพิ่มการแปลงโพรเซสที่ไวยากรณ์หรือลงโทษ/วินาทีที่จะง่ายสำหรับกำหนดโดยตรงในการหัสเป็นซ่อมรูปแบบอย่างทรมานจนทำให้เป็นรูปแบบส่งออกรูปแบบโดยอิสระจากกันเรื่องพิวเตอร์นาฬิกาวันและเวลารูปแบบแล้วและถ้าใครคนใดคนหนึ่งของ inputs เข้าไปในแฟ้ม"11/23/21,1:00 PM"แล้วสำหรับกำหนดอยู่ในนรหัสคุณต้องการแสดงผลในรูปแบบ"dd กองทัพรับจ้างเอกชน yyyy hh:mm" จะต้องเป็นผลมาจากการพยากรณ์เหมือน"23-พ.ย.-202101:00 PM"
รหัสส่วนในสคริปต์ที่จะใช้สำหรับการแปลงเป็น:
…
$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
…
ตัวอย่างของดิบแหล่งข้อมูล(ในซีวีเอสแฟ้มเป็นคนมาเป็นเบือนบรรทัดชอบต่อหนึ่ง):
...(DTRE|49.0|48.2);...;11/23/21, 12:58 PM...;
...(DTRE|52.1|52.0);...;11/23/21, 1:00 PM...;
...
...
และผลส่งออกดูเหมือนว่า:
ฉันพยายามกับ DateTime ตัวอย่างในอีกกัปตัน..เสาทางนี้จากที่นี่(stackoverflow.com)เพื่อปรับแก้รหัสที่จะทำงานในพิวเตอร์โดยไม่มีพวกเราวันและเวลารูปแบบและจะได้ DateTime รูปแบบผลลัพธ์ถูกระบุไว้ด้านบน ตัวอย่างเช่น:
'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))
…
แต่กับพวกตัวอย่าง PowerShell แสดงข้อผิดพลาด"ไม่สามารถให้พวกเถียงกันต้องพารามิเตอร์'InputObject'เพราะมันคือโพรโทคอล aimcomment"
ปรับปรุงหลังจากคำตอบจาก@เย็นไว้ไรอันเก็บไว้ก่อน
เมื่อพยายามต่อไปทำการแก้ไขของรหัสกับผู้พิวเตอร์ของระบบรูปแบบวันที่อยู่ใน"ก 24 พ.ย.-21"และส่วนที่เหลือทิ้งไปที่ด้านบน:
…
$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
หรือสำหรับตัวอย่างเช่นเพื่อนที่ชื่อของวัฒนธรรมes-ES
หรือบางอย่างที่คล้ายกัน",i.e. ถูกกำหนดโดยตรงในการหัสเป็นรูปแบบสากล/ทั่วไปทางไหนมันทำงานโดยไม่คำนึงถึงถ้าผู้พิวเตอร์อยู่ในภาษาอังกฤษวันและเวลารูปแบบหรือถ้าพิวเตอร์ในวิชาภาษาสเปนวันและเวลารูปแบบหรือถ้าพิวเตอร์เป็นภาษาฝรั่งเศสรูปแบบวันที่และเวลา