Comment faire pour formater un DateTime en PowerShell
Je peux formater le Get-Date
applet de commande pas de problème comme ceci:
$date = Get-Date -format "yyyyMMdd"
Mais une fois que j'ai une date dans une variable, comment puis-je formater? La déclaration ci-dessous
$dateStr = $date -format "yyyMMdd"
retourne cette erreur:
"Vous devez fournir une valeur de l'expression
sur le côté droit de la '-f'
l'opérateur"
- J'ai effectivement voulu cette syntaxe travaillé.
$date -format "yyyMMdd"
est beaucoup plus intuitive pour la mise en forme d'un objet unique que'{0:yyyyMMdd}' -f $date
.
Vous devez vous connecter pour publier un commentaire.
Le même comme vous le feriez dans .NET:
Ou:
You cannot call a method on a null-valued expression.
La réponse à la question, mais il y a une plus d'informations manquantes:
Variable vs Applet de commande
Vous avez une valeur dans la
$Date
variable et la-f
opérateur fonctionne sous cette forme:'format string' -f values
. Si vous appelezGet-Date -format "yyyyMMdd"
vous appelez une applet de commande avec certains paramètres. La valeur "aaaammjj" est la valeur pour le paramètreFormat
(essayezhelp Get-Date -param Format
).-f
opérateurIl y a beaucoup de chaînes de format. Regardez au moins à part1 et part2. Elle utilise
string.Format('format string', values')
. Il pense que'format-string' -f values
, parce que le-f
opérateur fonctionne de façon très similaire commestring.Format
méthode (bien qu'il existe quelques différences (pour plus d'informations, voir la question à Débordement de Pile: Comment exactement ne le membre de droite de PowerShell s -f travail d'opérateur?).Une chose que vous pourriez faire est:
Très pratique-mais probablement pas trop efficace, la solution est d'utiliser la fonction de membre de
GetDateTimeFormats()
,Cette fonction génère une chaîne de grande taille-tableau de styles de mise en forme pour la date de valeur. Vous pouvez alors choisir l'un des éléments de la matrice par le
[]
-opérateur, par exemple,Une façon simple et agréable est:
$time = (Get-Date).ToString("yyyy:MM:dd")
ou tout simplement
(Get-Date).ToString("yyyy:MM:dd")
Le faire si vous devez absolument utiliser le
-Format
option:Cependant
est probablement plus efficace.. 🙂
$dateStr = (Get-Date $date -Format "yyyMMdd")
résultats dans un type d'objet qui est différent d'un objet datetime. Essayez de jouer un peu avec ce$dateStr = [datetime](Get-Date $date -Format "yyyMMdd")
Vous verrez la différence tout de suite.Si vous avez obtenu ici de l'utiliser dans le DOS:
Pour quiconque essaie de formater la date pour une utilisation dans un en-tête HTTP utiliser le "r" (format court pour RFC1123) mais méfiez-vous de la mise en garde...
I. e. N'oubliez pas d'utiliser "ToUniversalTime()"
J'avais besoin de temps et une légère variation sur le format. Cela fonctionne très bien pour mes besoins:
Très instructif réponse de @stej, mais ici, c'est une réponse courte:
Parmi d'autres options, vous avez 3 options simples de format [Système.DateTime] stockée dans une variable:
Transmettre la variable à la Cmdlet Get-Date:
Get-Date -Format "HH:mm" $date
Utilisation la méthode toString() :
$date.ToString("HH:mm")
Utilisation Mise en forme des composites:
"{0:HH:mm}" -f $date