프로그래밍/PowerShell

DateTime 변환 시 Format 관련

로멘틱가이 2023. 1. 1. 02:15

Powershell에서 String형을 datetime형으로 변환하기 위한 방법입니다.

20160714 와 같은 format을 ToDateTime 이나 [datetime] 을 사용하여 변환하려고 하면 오류가 발생합니다.
이럴때 ParseExact를 사용하여 현재 Format을 인지 시켜 줘야합니다.

ParseExact의 Parameter는 다음과 같습니다.

s
Type: System.String
A string that contains a date and time to convert. 
format
Type: System.String
A format specifier that defines the required format of s. 
provider
Type: System.IFormatProvider
An object that supplies culture-specific format information about s.

그럼 다음과 같이 예시를 통해 알아보도록 하겠습니다.

>> $strDate = "20160714"

>> $dateDate = [datetime] $strDate
값 "20160714"을(를) "System.DateTime" 유형으로 변환할 수 없습니다. 오류: "문자열이 유효한 DateTime으로 인식되지 않습니다."

위치 줄:1 문자:1
+ $dateDate = [datetime] $strDate
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvalidCastParseTargetInvocationWithFormatProvider
>> $dateDate = [datetime]::parseExact($strDate, "yyyyMMdd", $null)
>> WriteHost $dateDate
2016-07-14 오전 12:00:00

parseExact를 통해 현재 String형의 각 값이 어떤 의미를 가지는지 인식을 시켜주면 정상적으로 DateTime 형으로 변환되는 것을 볼 수 있습니다.