Je suis à l'aide de PowerShell avec un script pour convertir un .CSV fichier raw, plus maniables format de données des colonnes séparées, un nettoyeur de vue etc. Et parce que le fichier source avec les données brutes est en NOUS format de date et heure (p. ex. 11/23/21, 1:00 PM), alors si le PC est dans le même format AMÉRICAIN le processus de conversion fonctionne parfaitement comme devrait l'être avec 0 erreurs. MAIS, si le PC est dans un pays différent format de date et heure, puis PowerShell montre les erreurs en rouge dans le processus.
Lorsque le PC est dans un autre format DateTime je vois la principale erreur est:
"Analyser" avec "1" argument(s): "la Chaîne n'a pas été reconnu comme un DateTime valide."
Et le problème est que le PC sur lequel il sera utilisé n'est pas au format AMÉRICAIN (seulement changé de format AMÉRICAIN pour les tests), donc quelqu'un pourrait ici s'il vous plaît m'aider à ajouter pour le processus de conversion de la syntaxe ou de la peine/s, il suffit de spécifier directement dans le code d'un format fixe qui maintient une statique format de sortie de façon indépendante sur l'horloge du PC format de date et heure, et si l'une des entrées dans le fichier est “11/23/21, 1:00” puis de préciser dans le code que vous voulez, la sortie dans le format “jj-MMM-aaaa hh:mm” pour avoir un résultat comme “23-Nov-2021 01:00 PM”
La section de code dans le script utilisé pour la conversion est la suivante:
…
$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
…
Exemple de la crue de source de données (dans le fichier CVS sont des dizaines de lignes, comme celle-ci):
...(DTRE|49.0|48.2);...;11/23/21, 12:58 PM...;
...(DTRE|52.1|52.0);...;11/23/21, 1:00 PM...;
...
...
Et la Sortie ressemble à ceci:
J'ai essayé avec DateTime des exemples dans d'autres posts à partir d'ici (stackoverflow.com) pour ajuster le code fonctionne sur un PC sans que NOUS le format de date et heure et pour obtenir le format DateTime résultat décrit ci-dessus. Des exemples comme:
'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))
…
Mais avec ces exemples, PowerShell affiche le message d'erreur “Ne peut pas se lier argument de paramètre InputObject " parce que c'est nul”
Mise à jour suite à la réponse de @Seth:
Lorsque vous essayez prochaine modification du code, avec le système de PC de format de date dans “24-Nov-21” et de laisser le reste comme ci-dessus:
…
$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
ou par exemple pour le nom de culturees-ES
ou quelque chose de semblable”, c'est à dire être spécifiée directement dans le code comme un universel/méthode générique où cela fonctionne, peu importe si le PC est en anglais format de date et heure, ou si le PC est en espagnol format de date et heure, ou si le PC est en français, format de date et heure