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' "
La même chose que dans .NET :
$DateStr = $Date.ToString("yyyyMMdd")
Ou:
$DateStr = '{0:yyyyMMdd}' -f $Date
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?).
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
Une chose que vous pouvez faire est:
$date.ToString("yyyyMMdd")
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 .. :)
Si vous êtes ici pour utiliser ceci sous DOS:
powershell -Command (Get-Date).ToString('yyyy-MM-dd')
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 ()"
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
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:
Transmettez la variable à la cmdlet Get-Date : Get-Date -Format "HH:mm" $date
Utilisez la méthode toString () : $date.ToString("HH:mm")
Utilisez Mise en forme composite : "{0:HH:mm}" -f $date