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?
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
$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.
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
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)