web-dev-qa-db-fra.com

Powershell convertit une chaîne en date/heure

J'utilise powershell pour essayer de convertir une chaîne en date/heure. Devrait être facile non?

Je reçois la chaîne à partir d'une importation au format CSV et elle se présente au format Jul-16. J'ai essayé plusieurs façons de l'obtenir dans le format que je veux, à savoir yyyy-MM-dd, et j'en suis actuellement à la suivante.

$invoice = $object.'Invoice Month'
$invoice = "01-" + $invoice
$invoice = [datetime]::parseexact($invoice, 'yyyy-MM-dd', $null)

Mais je reçois l'erreur:

La chaîne n'a pas été reconnue comme un DateTime valide.

Est-ce que je manque quelque chose?

9
Silentbob

ParseExact est informé du format de la date à analyser, et non du format que vous souhaitez extraire.

$invoice = '01-Jul-16'
[datetime]::parseexact($invoice, 'dd-MMM-yy', $null)

Si vous souhaitez ensuite sortir une chaîne de date:

[datetime]::parseexact($invoice, 'dd-MMM-yy', $null).ToString('yyyy-MM-dd')

Chris

13
Chris Dent
$invoice = "Jul-16"
[datetime]$newInvoice = "01-" + $invoice

$newInvoice.ToString("yyyy-MM-dd")

Voilà, utilisez un accélérateur de type, mais aussi dans une nouvelle variable. Si vous voulez l’utiliser ailleurs, utilisez-le comme suit: $newInvoice.ToString("yyyy-MM-dd")as $newInvoice sera toujours au format date et heure, sauf si vous transtypez ensuite, il perdra la possibilité d’exécuter des fonctions datetime - ajout de jours, etc.

2
X97

Vous devez spécifier le format il a déjà , pour pouvoir l'analyser:

$InvoiceDate = [datetime]::ParseExact($invoice, "dd-MMM-yy", $null)

Maintenant, vous pouvez le sortir dans le format dont vous avez besoin:

$InvoiceDate.ToString('yyyy-MM-dd')

ou

'{0:yyyy-MM-dd}' -f $InvoiceDate
2
Mathias R. Jessen

Espoir ci-dessous aide!

PS C:\Users\aameer>$invoice = $object.'Invoice Month'
$invoice = "01-" + $invoice
[datetime]$Format_date =$invoice

Maintenant, le type est converti. Vous pouvez utiliser la méthode ou accéder à n’importe quelle propriété.

Example :$Format_date.AddDays(5)
0
Aameer