Mogę sformatować Get-Date
cmdlet bez problemu w ten sposób:
$date = Get-Date -format "yyyyMMdd"
Ale kiedy już mam datę w zmiennej, jak ją sformatować? Poniższe oświadczenie
$dateStr = $date -format "yyyMMdd"
zwraca ten błąd:
„Musisz podać wyrażenie wartości po prawej stronie operatora„ -f ””
datetime
powershell
Ev.
źródło
źródło
$date -format "yyyMMdd"
jest znacznie bardziej intuicyjny w formatowaniu pojedynczego obiektu niż'{0:yyyyMMdd}' -f $date
.-f
operator (ze składnią pokazaną w zaakceptowanej odpowiedzi), ale nie ma-format
operatora. Komunikat o błędzie narzeka, żeormat
nie jest prawidłowym operandem RHS, ale zwróć uwagę, że ostatnie wersje PowerShell w rzeczywistości emitują inny, bardziej pomocny komunikat o błędzie:Unexpected token '-format' in expression or statement
Odpowiedzi:
To samo, co w .NET :
Lub:
źródło
Odpowiedź na pytanie, ale brakuje kilku informacji:
Zmienna a polecenie cmdlet
Masz wartość w
$Date
zmiennej i-f
operator działa w tej formie:'format string' -f values
. Jeśli wywołaszGet-Date -format "yyyyMMdd"
, wywołaj polecenie cmdlet z pewnymi parametrami. Wartość „rrrrMMdd” jest wartością parametruFormat
(tryhelp Get-Date -param Format
).-f
operatorIstnieje wiele ciągów formatujących. Spójrz przynajmniej na część 1 i część 2 . Ona używa
string.Format('format string', values')
. Pomyśl o tym tak'format-string' -f values
, ponieważ-f
operator działa bardzo podobnie dostring.Format
metody (chociaż istnieją pewne różnice (więcej informacji można znaleźć w pytaniu o przepełnienie stosu: Jak dokładnie działa RHS operatora -f programu PowerShell? ).źródło
Jedna rzecz, którą możesz zrobić, to:
źródło
Bardzo wygodnym - ale chyba niezbyt wydajnym - rozwiązaniem jest użycie funkcji składowej
GetDateTimeFormats()
,Spowoduje to utworzenie dużej tablicy ciągów stylów formatowania dla wartości daty. Następnie możesz wybrać jeden z elementów tablicy za pomocą
[]
operatora, np.źródło
Prosty i przyjemny sposób to:
$time = (Get-Date).ToString("yyyy:MM:dd")
źródło
Zrób to, jeśli absolutnie potrzebujesz skorzystać z
-Format
opcji:jednak
jest chyba bardziej wydajne .. :)
źródło
$dateStr = (Get-Date $date -Format "yyyMMdd")
daje w wyniku typ obiektu, który różni się od obiektu typu data-godzina. Spróbuj się tym bawić$dateStr = [datetime](Get-Date $date -Format "yyyMMdd")
. Od razu zauważysz różnicę.Jeśli masz tutaj, aby użyć tego w
cmd.exe
(w pliku wsadowym):źródło
Potrzebowałem czasu i niewielkiej zmiany formatu. To działa świetnie do moich celów:
Zgodnie z @ mklement0 w komentarzach powinno to dać ten sam wynik:
źródło
Bardzo pouczająca odpowiedź od @stej , ale tutaj jest krótka odpowiedź: Wśród innych opcji masz 3 proste opcje formatowania [System.DateTime] przechowywanego w zmiennej:
Przekaż zmienną do polecenia cmdlet Get-Date :
Get-Date -Format "HH:mm" $date
Użyj metody toString () :
$date.ToString("HH:mm")
Użyj formatowania kompozytowego :
"{0:HH:mm}" -f $date
źródło
Dla każdego, kto próbuje sformatować aktualną datę do użycia w nagłówku HTTP, użyj formatu "r" (skrót od RFC1123), ale uważaj na zastrzeżenie ...
To znaczy nie zapomnij użyć „ToUniversalTime ()”
źródło