CHashtag

[C#] DateTime nullable 에서의 ToString("yyyy-MM-dd") ?(System.InvalidOperationException) 본문

C#

[C#] DateTime nullable 에서의 ToString("yyyy-MM-dd") ?(System.InvalidOperationException)

HyoSeong 2020. 8. 10. 17:36
반응형

결론부터 알려드리겠습니다.

DateTime? dateTime = null;

if(dateTime != null)
{
    Console.WriteLine(dateTime.Value.ToString("yyyy"));
}

또는

DateTime? dateTime = null;

Console.WriteLine(dateTime?.ToString("yyyy"));

을 사용하면 됩니다.

 

 

 

 

기본적으로 DateTime 형식에는 null이 지원되지 않습니다.

이때 타입 뒤에 "?" 를 붙임으로써 nullable형식으로 만들 수 있는데 이때 DateTime의 ToString함수가 overloading을 제공하지 않습니다.

정확히는 Nullable의 ToString이 제공하지 않는다.
안된다.

이때 Nullable의 Value라는 속성을 이용하면 됩니다.

하지만 Value가 null일 경우 System.InvalidOperationException가 발생하니 사전에 null인지 체크를 해주어야 합니다.

DateTime? dateTime = null;

if(dateTime != null)
{
    Console.WriteLine(dateTime.Value.ToString("yyyy"));
}

 

C# 6.0 이상에서는 Null conditional operator를 사용하여 다음과 같이 구현할 수 있습니다.

 

해당 연산자를 사용하면 값이 null이 아닐 때 실행됩니다.

DateTime? dateTime = null;

Console.WriteLine(dateTime?.ToString("yyyy")); // null 반환된다.

dateTime = new DateTime(2020, 8, 10);

Console.WriteLine(dateTime?.ToString("yyyy"));

// 출력결과
// 2020

 

 

감사합니다.

반응형