2010-02-12 9 views
86

Je peux formater le Get-Date commandlet aucun problème comme celui-ci:Comment formater un DateTime dans PowerShell?

$date = Get-Date -format "yyyyMMdd" 

, mais une fois que j'ai a date dans une variable, comment formater je l'ai? La déclaration ci-dessous

$dateStr = $date -format "yyyMMdd" 

renvoie cette erreur:

"You must provide a value expression on the right-hand side of the '-f' operator"

+1

En fait, j'ai souhaité que cette syntaxe fonctionne. '$ date -format" yyyMMdd "' est beaucoup plus intuitif pour formater un seul objet que '' {0: yyyyMMdd} '-f $ date'. – orad

Répondre

126

comme vous le feriez dans .NET.

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

ou

$DateStr = '{0:yyyyMMdd}' -f $Date 
+1

Merci pour le compagnon de réponse -f! –

+1

Comment formater yyyymmddhhmm Monsieur? – toha

+1

Je pense comme ceci: $ Date = Get-Date -format "aaaaMMjjhmm" Merci – toha

9

Une chose que vous pouvez faire est:

$date.ToString("yyyyMMdd") 
+0

Merci j'ai fait cela - bugs-moi que -format ne fonctionne pas bien. –

+0

Ya, la solution de @Josh Einstein est juste sur l'argent :) –

19

La question réponse, mais il y a un peu plus d'informations manquantes:

variable par rapport à Cmdlet

Vous avez une valeur variable et $Date l'opérateur -f fonctionne sous ce format: 'format string' -f values. Si vous appelez Get-Date -format "yyyyMMdd" vous appelez un cmdlet avec quelques paramètres. La valeur "aaaaMMdj" est la valeur du paramètre Format (essayez 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 'format-string' -f values, car l'opérateur -f fonctionne de manière similaire comme méthode string.Format (bien qu'il existe quelques différences (pour plus d'informations qu'ils examinent la question à Stack Overflow:. How exactly does the RHS of PowerShell's -f operator work?)

+0

Merci beaucoup pour l'info. –

+2

Ce qu'il dit est que le paramètre -Format provoque Get-DateTime pour renvoyer une chaîne, pas un objet DateTime. Ainsi, votre variable $ Date ne peut plus être formatée comme prévu. Je souhaite vraiment que le paramètre -Format change simplement le comportement par défaut de la méthode ToString d'un objet DateTime particulier. Ensuite, cela fonctionnerait comme prévu. –

1

Une façon simple et agréable est:

$time = (Get-Date).ToString("yyyy:MM:dd")

ou simplement

(Get-Date).ToString("yyyy:MM:dd")

4

Un très pratique - mais probablement pas trop efficace - solution est d'utiliser la fonction de membre GetDateTimeFormats(),

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

Ceci produit une grande chaîne de tableau de mise en forme des styles pour la date de valeur. Vous pouvez ensuite sélectionner l'un des éléments du tableau via l'opérateur [], par ex.,

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

Si vous avez ici pour utiliser ce sous DOS:

powershell -Command (Get-Date).ToString('yyyy-MM-dd') 
1

Que diriez-vous faire si vous devez absolument utiliser l'option -Format:

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

Cependant

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

est probablement plus efficace .. :)

+0

'$ dateStr = (Obtenir-Date $ date -Format" aaaaMMdj ")' aboutit à un type d'objet différent d'un objet datetime. Essayez de jouer avec ce '$ dateStr = [datetime] (Get-Date $ date -Format" yyyMMdd ")' Vous verrez la différence tout de suite. –

+0

Eh bien, ouais .. C'est une chaîne, c'est pourquoi je l'ai appelé dateStr .. :) OP essayait de mettre en forme un objet date à une chaîne. – tplive

Questions connexes