245 votes

Comment formater un DateTime en PowerShell

Je peux formater le Get-Date cmdlet sans problème de cette manière :

$date = Get-Date -format "yyyyMMdd"

Mais une fois que j'ai une date dans une variable, comment la formater ? La commande ci-dessous

$dateStr = $date -format "yyyMMdd"

renvoie cette erreur :

"Vous devez fournir une expression de valeur du côté droit de l'opérateur '-f'"

5 votes

Je souhaitais en fait que cette syntaxe fonctionne. $date -format "yyyMMdd" est beaucoup plus intuitive pour formater un seul objet que '{0:yyyyMMdd}' -f $date.

0 votes

En aparté : PowerShell possède un opérateur -f (avec la syntaxe indiquée dans la réponse acceptée), mais aucun opérateur -format. Le message d'erreur se plaint du fait que ormat n'est pas un opérande RHS valide, mais notez que les versions récentes de PowerShell émettent en réalité un message d'erreur différent et plus utile : Unexpected token '-format' in expression or statement

1 votes

@orad votre commentaire fait beaucoup plus pour expliquer la syntaxe boilerplate "{0:...}" que la réponse en tête et acceptée qui le suggère. Merci. (Votre commentaire nous indique qu'il s'agit d'un cas particulier de quelque chose qui prend en charge plusieurs choses formatées à la fois, ce qui nous permet de réaliser que nous sommes en train de regarder quelque chose de bien plus général que simplement du sucre syntaxique pour .ToString(...)... et que, combiné à une expérience de programmation suffisante, nous pouvons deviner que les chaînes de format utilisent des références indexées à zéro des objets interpolés, et utilisent {} pour envelopper les espaces réservés.)

2voto

TerryV Points 1

Formater la date et l'heure selon vos besoins en sortie

Si vous souhaitez formater la date et attribuer la chaîne à une variable. J'ai combiné à la fois PowerShell et .NET pour offrir de la flexibilité.

    $oDate = '{0}' -f ([system.string]::format('{0:yyyyMMddHHmmss}',(Get-Date)))

Comment cela fonctionne

  • Opérateur PowerShell -'{0}' -f (.....)
  • Notation .NET - [system.string]::format('formatpersonnalisé',ObjetEntrée)
  • Format personnalisé en combinant PowerShell et .NET - '{0:yyyyMMddHHmmss}'
  • Objet d'entrée fourni par la commande PowerShell - (Get-Date)
  • Stocké dans la variable PowerShell - $oDate

Exemple

Si la date et l'heure au moment de l'exécution étaient lundi 5 juillet 2021 17:45:22 (Format '{0:F}').

  • $oDate = 20210705174522

Utilisation du code

Vous pouvez personnaliser la chaîne pour répondre à vos besoins en modifiant 'yyyMMddHHmmss' en utilisant la Notation de date et d'heure personnalisée Microsoft .NET.

0 votes

Pourquoi pas juste ? [chaîne]$oDate = '([system.string]::format('{0:yyyyMMddHHmmss}',(Get-Date)))

0voto

Phil Pritchett Points 1

Vous pourriez simplement utiliser ceci pour sélectionner le format que vous voulez, puis le coller où il est nécessaire.

$DTFormats = (Get-Date).GetDateTimeFormats()
$Formats = @()
$i=0
While ($i -lt $DTFormats.Count){
    $row = [PSCustomObject]@{
        'IndexNumber' = $i
        'Format de date-heure' = $DTFormats[$i]
    }
    $Formats += $row
    $i++
}

$DTSelection = ($Formats | Out-GridView -OutputMode Single -Title 'Sélectionnez le format de date-heure').IndexNumber
$MyDTFormat = "(Get-Date).GetDateTimeFormats()[$DTSelection]"
Write-Host " "
Write-Host " Utilisez le code suivant pour obtenir le format de date-heure que vous avez sélectionné :"
Write-Host "    $MyDTFormat" -ForegroundColor Green
Write-Host " "
$MyDTFormat | Clip
Write-Host " Le code a été copié dans votre presse-papiers. Collez-le où c'est nécessaire."

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X