PowerShell에서 DateTime을 형식화하는 방법


156

다음 Get-Date과 같이 cmdlet을 아무 문제없이 포맷 할 수 있습니다 .

$date = Get-Date -format "yyyyMMdd"

그러나 변수에 날짜 가 있으면 어떻게 형식을 지정합니까? 아래 진술

$dateStr = $date -format "yyyMMdd"

이 오류를 반환합니다 :

" '-f'연산자의 오른쪽에 값 표현식을 제공해야합니다."


3
나는 실제로이 문법이 효과가 있기를 바랐다. $date -format "yyyMMdd"단일 객체의 형식을 지정하는 것보다 훨씬 직관적입니다 '{0:yyyyMMdd}' -f $date.
— orad

따로 : PowerShell에는 -f연산자 (허용 된 답변에 표시된 구문)가 있지만 -format연산자는 없습니다 . 오류 메시지는 ormat유효한 RHS 피연산자가 아니라고 불평 하지만 최근 PowerShell 버전은 실제로 다른 유용한 오류 메시지를 표시합니다.Unexpected token '-format' in expression or statement
— mklement0

답변:


221

.NET 에서와 동일합니다 .

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

또는:

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

26

질문에 대한 답변이 있지만 누락 된 정보가 더 있습니다.

변수 대 Cmdlet

$Date변수에 값이 있고-f 연산자는 다음 형식으로 작동 'format string' -f values합니다. 호출 Get-Date -format "yyyyMMdd"하면 일부 매개 변수를 사용 하여 cmdlet 을 호출합니다 . "yyyyMMdd"값은 매개 변수 값 Format(try help Get-Date -param Format)입니다.

-f 운영자

많은 형식 문자열이 있습니다. 적어도 part1 과 part2를보십시오 . 그녀는를 사용합니다 string.Format('format string', values'). 이라고 생각 'format-string' -f values때문에, -f작업자가 같은 매우 유사하게 작동합니다 string.Format: 스택 오버플로에서 질문에서 더 많은 정보를보기위한 몇 가지 차이점이 (가 있지만 (방법 은 어떻게 정확하게 수행 PowerShell에서의 -f 운영자 작업의 RHS? ).


3
그가 말하는 것은 -Format 매개 변수가 Get-DateTime이 DateTime 개체가 아닌 문자열을 반환하게한다는 것입니다. 따라서 변수 $ Date를 더 이상 예상대로 포맷 할 수 없습니다. -Format 매개 변수가 특정 DateTime 개체의 ToString 메서드의 기본 동작을 단순히 변경하기를 원합니다. 그런 다음 예상대로 작동합니다.
— Nathan Hartley

19

당신이 할 수있는 한 가지는 :

$date.ToString("yyyyMMdd")

고마워, 나는 이것을했다-나에게-형식이 작동하지 않는 버그.
— Ev.

18

매우 편리한 (아마도 너무 효율적인 것은 아님) 솔루션은 멤버 함수를 사용하는 것입니다 GetDateTimeFormats().

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

날짜-값에 대한 서식 스타일의 큰 문자열 배열을 출력합니다. 그런 다음 []-operator 를 통해 배열의 요소 중 하나를 선택할 수 있습니다 ( 예 :

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

16

간단하고 좋은 방법은 다음과 같습니다.

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


2
이것은 나에게 null 값 식 오류를 발생시키지 않는 유일한 접근 방식이었습니다. 감사.
— Ecker00

7

-Format옵션 을 반드시 사용해야하는 경우이 작업을 수행하십시오 .

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

하나

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

아마 더 효율적입니다 .. :)


$dateStr = (Get-Date $date -Format "yyyMMdd")datetime 객체와 다른 객체 유형이됩니다. 이것으로 놀아보십시오. $dateStr = [datetime](Get-Date $date -Format "yyyMMdd") 당신은 즉시 차이점을 볼 수 있습니다.
— Jamie Marshall

1
글쎄, 예 .. 그것은 문자열이기 때문에 이름을 dateStr.로 지정했습니다. :) OP는 날짜 개체를 문자열로 포맷하려고했습니다.
— tplive

4

이것을 cmd.exe배치 파일 로 사용하려면 여기에 오십시오.

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

4

시간과 형식에 약간의 변화가 필요했습니다. 이것은 내 목적에 잘 작동합니다.

$((get-date).ToLocalTime()).ToString("yyyy-MM-dd HHmmss")

2019-08-16 215757

주석의 @ mklement0에 따르면 동일한 결과를 얻을 수 있습니다.

(get-date).ToString("yyyy-MM-dd HHmmss")


3

HTTP 헤더에서 사용 하기 위해 현재 날짜를 형식화하려는 사람 은 "r"형식 (RFC1123의 약자)을 사용하지만주의해야합니다 ...

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

즉 "ToUniversalTime ()"을 사용하는 것을 잊지 마십시오


"xml"스타일 날짜 시간에 이것을 "o"와 함께 사용
— JohnOpincar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.