Je peux formater l' Get-Date
applet de commande sans 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 sur le côté droit de l'opérateur '-f'"
$date -format "yyyMMdd"
est beaucoup plus intuitif pour formater un seul objet que'{0:yyyyMMdd}' -f $date
.-f
opérateur (avec la syntaxe indiquée dans la réponse acceptée), mais pas d'-format
opérateur. Le message d'erreur se plaint deormat
ne pas être un opérande RHS valide, mais notez que les versions récentes de PowerShell émettent en fait un message d'erreur différent et plus utile:Unexpected token '-format' in expression or statement
Réponses:
Comme vous le feriez dans .NET :
Ou:
la source
La question est répondue, mais il manque quelques informations supplémentaires:
Variable vs cmdlet
Vous avez une valeur dans la
$Date
variable et l'-f
opérateur FONCTIONNE sous cette forme:'format string' -f values
. Si vous appelez,Get-Date -format "yyyyMMdd"
vous appelez une applet de commande avec certains paramètres. La valeur "aaaaMMjj" est la valeur du paramètreFormat
(essayezhelp Get-Date -param Format
).-f
opérateurIl existe de nombreuses chaînes de format. Regardez au moins part1 et part2 . Elle utilise
string.Format('format string', values')
. Considérez-le comme'format-string' -f values
, parce que l'-f
opérateur fonctionne de manière très similaire en tant questring.Format
méthode (bien qu'il y ait quelques différences (pour plus d'informations, consultez la question sur Stack Overflow: Comment fonctionne exactement le RHS de l'opérateur -f de PowerShell? ).la source
Une chose que vous pourriez faire est:
la source
Une solution très pratique - mais probablement pas trop efficace - consiste à utiliser la fonction membre
GetDateTimeFormats()
,Cela génère un grand tableau de chaînes de styles de mise en forme pour la valeur de date. Vous pouvez alors choisir l'un des éléments du tableau via l'
[]
opérateur, par exemple,la source
Une manière simple et agréable est:
$time = (Get-Date).ToString("yyyy:MM:dd")
la source
Faites ceci si vous devez absolument utiliser l'
-Format
option:toutefois
est probablement plus efficace .. :)
la source
$dateStr = (Get-Date $date -Format "yyyMMdd")
génère un type d'objet différent d'un objet datetime. Essayez de jouer avec cela$dateStr = [datetime](Get-Date $date -Format "yyyMMdd")
Vous verrez tout de suite la différence.Si vous êtes arrivé ici pour l'utiliser dans
cmd.exe
(dans un fichier batch):la source
J'avais besoin de temps et d'une légère variation de format. Cela fonctionne très bien pour mes besoins:
Selon @ mklement0 dans les commentaires, cela devrait donner le même résultat:
la source
Réponse très informative de @stej , mais voici une réponse courte: Entre autres options , vous avez 3 options simples pour formater [System.DateTime] stocké dans une variable:
Transmettez la variable à la cmdlet Get-Date :
Get-Date -Format "HH:mm" $date
Utilisez la méthode toString () :
$date.ToString("HH:mm")
Utilisez la mise en forme composite :
"{0:HH:mm}" -f $date
la source
Pour quiconque essaie de formater la date actuelle pour une utilisation dans un en-tête HTTP, utilisez le format "r" (abréviation de RFC1123), mais attention à la mise en garde ...
Ie N'oubliez pas d'utiliser "ToUniversalTime ()"
la source