web-dev-qa-db-fra.com

Comment formater un DateTime dans PowerShell

Je peux formater le Get-Date cmdlet pas de problème comme ceci:

$date = Get-Date -format "yyyyMMdd"

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

$dateStr = $date -format "yyyMMdd"

renvoie cette erreur:

"Vous devez fournir une expression de valeur À droite de l'opérateur '-f' "

110
Ev.

La même chose que dans .NET :

$DateStr = $Date.ToString("yyyyMMdd")

Ou:

$DateStr = '{0:yyyyMMdd}' -f $Date
174
Josh

La question a reçu une réponse, mais il manque quelques informations supplémentaires:

Variable vs. Cmdlet

Vous avez une valeur dans la variable $Date et l'opérateur -f fonctionne sous cette forme: 'format string' -f values. Si vous appelez Get-Date -format "yyyyMMdd", vous appelez une cmdlet avec certains paramètres. La valeur "aaaaMMjj" est la valeur du paramètre Format (try help Get-Date -param Format).

-f opérateur

Il y a beaucoup de chaînes de format. Regardez au moins part1 et part2 . Elle utilise string.Format('format string', values'). Pensez-y comme étant 'format-string' -f values, car l'opérateur -f fonctionne de manière très similaire à la méthode string.Format (bien qu'il y ait quelques différences (pour plus d'informations, consultez la question sur Stack Overflow: Comment exactement fait le RHS de PowerShell - f travail opérateur?).

22
stej

Une solution très pratique - mais probablement pas trop efficace - consiste à utiliser la fonction membre GetDateTimeFormats() ,

$d = Get-Date
$d.GetDateTimeFormats()

Cela produit un grand nombre de chaînes de styles de formatage pour la valeur de date. Vous pouvez ensuite choisir l’un des éléments du tableau via l’opérateur []-, par exemple,

PS C:\> $d.GetDateTimeFormats()[12]
Dienstag, 29. November 2016 19.14
11
davidhigh

Une chose que vous pouvez faire est:

$date.ToString("yyyyMMdd")
11
John Weldon

Faites ceci si vous devez absolument utiliser l'option -Format:

$dateStr = (Get-Date $date -Format "yyyMMdd")

Toutefois

$dateStr = $date.toString('yyyMMdd')

est probablement plus efficace .. :)

2
tplive

Si vous êtes ici pour utiliser ceci sous DOS:

powershell -Command (Get-Date).ToString('yyyy-MM-dd')
1
Jaroslav Záruba

Pour ceux qui essaient de formater la date actuelle pour une utilisation dans un en-tête HTTP , utilisez le format "r" (abréviation de RFC1123), mais méfiez-vous de la mise en garde ...

PS C:\Users\Me> (get-date).toString("r")
Thu, 16 May 2019 09:20:13 GMT
PS C:\Users\Me> get-date -format r
Thu, 16 May 2019 09:21:01 GMT
PS C:\Users\Me> (get-date).ToUniversalTime().toString("r")
Thu, 16 May 2019 16:21:37 GMT

C'est à dire. N'oubliez pas d'utiliser "ToUniversalTime ()"

0
Peter L

J'avais besoin de temps et d'une légère variation de format. Cela fonctionne très bien pour mes besoins:

$((get-date).ToLocalTime()).ToString("yyyy-MM-dd HHmmss")

2019-08-16 215757

0
Scott Beeson

Très informatif réponse de @stej , mais voici une réponse brève: Parmi autres options , vous avez 3 options simples au format [System.DateTime] stocké dans un variable:

  1. Transmettez la variable à la cmdlet Get-Date : Get-Date -Format "HH:mm" $date

  2. Utilisez la méthode toString () : $date.ToString("HH:mm") 

  3. Utilisez Mise en forme composite : "{0:HH:mm}" -f $date

0
Eddie Kumar