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 운영자

많은 형식 문자열이 있습니다. 적어도 part1part2를보십시오 . 그녀는를 사용합니다 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.