मैं का उपयोग कर रहा हूँ PowerShell के साथ एक स्क्रिप्ट में परिवर्तित करने के लिए एक .सीएसवी कच्चे डेटा फ़ाइल में और अधिक प्रबंधनीय डेटा प्रारूप के साथ अलग-अलग कॉलम, एक क्लीनर आदि. और क्योंकि स्रोत फ़ाइल में कच्चे डेटा में है की हमें तारीख और समय प्रारूप (उदाहरण के लिए 11/23/21, 1:00 PM) है, तो अगर आप पीसी में एक ही है कि हमें प्रारूप रूपांतरण की प्रक्रिया पूरी तरह से चलाता है के रूप में होना चाहिए के साथ 0 त्रुटियों. लेकिन, अगर आप पीसी में एक अलग देश तारीख और समय प्रारूप है, तो PowerShell शो में त्रुटियाँ लाल प्रक्रिया में.
जब पीसी में अन्य DateTime स्वरूप में मैं मुख्य त्रुटि है:
"पार्स" के साथ "1" तर्क(ओं): "स्ट्रिंग नहीं था के रूप में मान्यता प्राप्त एक मान्य दिनांक समय."
और समस्या है, जहां पीसी का उपयोग किया जाएगा नहीं है अमेरिका में प्रारूप (केवल बदल गया है हमें करने के लिए प्रारूप के परीक्षण के लिए), तो किसी ने यहाँ मेरी मदद करने के लिए जोड़ने के लिए रूपांतरण की प्रक्रिया वाक्य रचना या वाक्य/एस करने के लिए बस सीधे निर्दिष्ट कोड में एक तय प्रारूप है कि रहता है एक स्थिर आउटपुट स्वरूप स्वतंत्र रूप से के बारे में पीसी घड़ी की तारीख और समय प्रारूप, और अगर एक इनपुट फ़ाइल में है "11/23/21, 1:00 हूँ" तो फिर में निर्दिष्ट करने के लिए कोड आप चाहते हैं के उत्पादन में प्रारूप "डीडी-एम एम एम-yyyy hh:mm" करने के लिए एक परिणाम की तरह "23-नवम्बर-2021 01: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
…
उदाहरण के कच्चे डेटा स्रोत में (CVS फाइल के दर्जनों रहे हैं लाइनों की तरह अगले एक):
...(DTRE|49.0|48.2);...;11/23/21, 12:58 हूँ...;
...(DTRE|52.1|52.0);...;11/23/21, 1:00 हूँ...;
...
...
और उत्पादन की तरह लग रहा है:
मैं करने की कोशिश की के साथ शब्दकोश उदाहरण में अन्य पदों से यहाँ (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' है, क्योंकि यह अशक्त"
अद्यतन करने के बाद जवाब से @सेठ:
कोशिश कर रहा है जब अगले संशोधन कोड के साथ पीसी प्रणाली तारीख प्रारूप में "24-Nov-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
, या कुछ इसी तरह", यानी निर्दिष्ट किया जा रहा में सीधे कोड के रूप में एक यूनिवर्सल/सामान्य तरीका है, जहां यह काम करता है, तो परवाह किए बिना पीसी अंग्रेजी में है, तारीख और समय प्रारूप, या अगर आप पीसी में स्पेनिश तारीख और समय प्रारूप, या अगर आप पीसी में फ्रेंच तारीख और समय प्रारूप