C# DateTime 형식 지정자 : 원하는 형식으로 날짜 및 시간을 표현하자

C#에서는 DateTime 값을 문자열로 변환할 때 사용할 수 있는 다양한 형식 지정자와 형식 문자열을 제공합니다. 이를 사용하면 원하는 형식으로 날짜와 시간을 표시할 수 있습니다. C# DateTime.ToString 메서드를 사용하여 원하는 형식으로 날짜 및 시간을 표시할 수 있습니다.

소개

먼저 대한민국에서 가장 많이 쓰이는 문자열로 변환해 보겠습니다.

DateTime dt = DateTime.Now;
string formattedDate = dt.ToString("yyyy-MM-dd HH:mm:ss");
Console.WriteLine(formattedDate);

출력문은 다음과 같습니다.

2024-03-18 17:40:08

ToString(“yyyy-MM-dd HH:mm:ss”) 은 날짜를 어떻게 표현해야 할지를 알려줍니다.
이제 여러 형식 지정자에 대해 알아보겠습니다.

표준 형식 지정자

표준 datetime 형식 문자열은 단일 문자 형식 지정자를 사용하여 DateTime 값을 문자열로 표현합니다.
다음 표에서 그 예제들을 정의 합니다.

지정자 의미 결과
D 자세한 날짜 2024년 3월 18일 월요일
d 간단한 날짜 2024-03-18
F 긴 전체 날짜 2024년 3월 18일 월요일 오후 5:50:57
f 짧은 전체 날짜 2024년 3월 18일 월요일 오후 5:50
G 긴일반 날짜 2024-03-18 오후 5:50:57
g 짧은 일반 날짜 2024-03-18 오후 5:50
U 범용 전체 날짜 2024년 3월 18일 월요일 오전 8:50:57
u 범용 정렬 가능 2024-03-18 17:50:57Z
s 정렬 2024-03-18T17:50:57
T 긴 시간 오후 5:50:57
t 짧은 시간 오후 5:50
O ISO 8601 2024-03-18T17:50:57.0221688+09:00
R RFC 1123 Mon, 18 Mar 2024 17:50:57 GMT
M 3월 18일
Y 년 월 2024년 3월
var now = DateTime.Now;

Console.WriteLine(now.ToString("D"));
Console.WriteLine(now.ToString("d"));
Console.WriteLine(now.ToString("F"));
Console.WriteLine(now.ToString("f"));
Console.WriteLine(now.ToString("G"));
Console.WriteLine(now.ToString("g"));
Console.WriteLine(now.ToString("U"));
Console.WriteLine(now.ToString("u"));
Console.WriteLine(now.ToString("s"));
Console.WriteLine(now.ToString("T"));
Console.WriteLine(now.ToString("t"));
Console.WriteLine(now.ToString("O"));
Console.WriteLine(now.ToString("R"));
Console.WriteLine(now.ToString("M"));
Console.WriteLine(now.ToString("Y"));

출력은 다음과 같습니다.

2024년 3월 18일 월요일
2024-03-18
2024년 3월 18일 월요일 오후 6:23:45
2024년 3월 18일 월요일 오후 6:23
2024-03-18 오후 6:23:45
2024-03-18 오후 6:23
2024년 3월 18일 월요일 오전 9:23:45
2024-03-18 18:23:45Z
2024-03-18T18:23:45
오후 6:23:45
오후 6:23
2024-03-18T18:23:45.8169211+09:00
Mon, 18 Mar 2024 18:23:45 GMT
3월 18일
2024년 3월

다음과 같이 string 형식 지정자 표현으로 간소화 할 수 있습니다.

var now = DateTime.Now;

Console.WriteLine($"{now:D}");
Console.WriteLine($"{now:d}");
Console.WriteLine($"{now:F}");
Console.WriteLine($"{now:f}");
Console.WriteLine($"{now:G}");
Console.WriteLine($"{now:g}");
Console.WriteLine($"{now:U}");
Console.WriteLine($"{now:u}");
Console.WriteLine($"{now:s}");
Console.WriteLine($"{now:T}");
Console.WriteLine($"{now:t}");
Console.WriteLine($"{now:O}");
Console.WriteLine($"{now:R}");
Console.WriteLine($"{now:M}");
Console.WriteLine($"{now:Y}");

문화권별 형식 지정자

나라별 문화권별 형식을 지정할 수 있습니다.
만약 미국식 영어 표기로 표현하고 싶다면 다음과 같이 지정하면 됩니다.

var now = DateTime.Now;

var ci = CultureInfo.CreateSpecificCulture("en-US");
CultureInfo.DefaultThreadCurrentCulture = ci;

Console.WriteLine(now.ToString("D"));
Console.WriteLine(now.ToString("d"));
Console.WriteLine(now.ToString("F"));
Console.WriteLine(now.ToString("f"));
Console.WriteLine(now.ToString("G"));
Console.WriteLine(now.ToString("g"));
Console.WriteLine(now.ToString("U"));
Console.WriteLine(now.ToString("u"));
Console.WriteLine(now.ToString("s"));
Console.WriteLine(now.ToString("T"));
Console.WriteLine(now.ToString("t"));
Console.WriteLine(now.ToString("O"));
Console.WriteLine(now.ToString("R"));
Console.WriteLine(now.ToString("M"));
Console.WriteLine(now.ToString("Y"));

출력은 다음과 같습니다.

Monday, March 18, 2024
3/18/2024
Monday, March 18, 2024 6:32:27 PM
Monday, March 18, 2024 6:32 PM
3/18/2024 6:32:27 PM
3/18/2024 6:32 PM
Monday, March 18, 2024 9:32:27 AM
2024-03-18 18:32:27Z
2024-03-18T18:32:27
6:32:27 PM
6:32 PM
2024-03-18T18:32:27.3184691+09:00
Mon, 18 Mar 2024 18:32:27 GMT
March 18
March 2024

아래 문장이 영어권 표기를 지정하는 코드 입니다.

var ci = CultureInfo.CreateSpecificCulture("en-US");

대표적은 문화권은 다음과 같습니다.

  • en-US: 영어(미국)
  • ko-KR: 한국어(대한민국)
  • zh-CN: 중국어(중국)
  • ja-JP: 일본어(일본)

사용자 지정 형식 지정자

사용자 지정 형식 지정자는 다음표를 조합하여 날짜 지정 문자열을 만듭니다.

지정자 의미
d 1에서 31까지의 날짜입니다.
dd 01부터 31까지의 날짜입니다.
ddd 요일의 약식 이름입니다.
dddd 요일의 전체 이름입니다.
f 날짜 및 시간 값의 1/11초입니다.
ff 날짜 및 시간 값의 100분의 1초입니다.
fff 날짜 및 시간 값의 밀리초입니다.
ffff 날짜 및 시간 값의 10,000분의 1초입니다.
fffff 날짜 및 시간 값의 십만 분의 1초..
ffffff 날짜 및 시간 값의 100분의 1초입니다.
fffffff 날짜 및 시간 값의 백만분의 1초입니다.
ffffffff 날짜 및 시간 값의 1000만분의 1초입니다.
g/gg 시대 또는 시대입니다.
h 1에서 12까지 12시간제를 사용하는 시간입니다.
hh 01에서 12까지 12시간제를 사용하는 시간입니다.
H 0에서 23 사이의 24시간제를 사용하는 시간입니다.
HH 00에서 23까지 24시간제를 사용하는 시간입니다.
K 표준 시간대 정보입니다.
m 0에서 59 사이의 분입니다.
mm 00에서 59까지의 분입니다.
M 1월부터 12일까지의 월입니다.
MM 01부터 12까지의 월입니다.
MMM 월의 약식 이름입니다.
MMMM 월의 전체 이름입니다.
s 두 번째는 0에서 59까지입니다.
ss 두 번째는 00에서 59까지입니다.
t AM/PM 지정자의 첫 번째 문자입니다.
tt AM/PM 지정자입니다.
y 연도는 0에서 99 사이입니다.
yy 연도는 00에서 99까지입니다.
yyy 최소 세 자리 숫자의 연도입니다.
yyyy 연도를 4자리 숫자로 표시합니다.
yyyyy 연도를 5자리 숫자로 표시합니다.
z 시간 오프셋은 UTC에서 선행 0 없이 표시됩니다.
zz UTC에서 시간 오프셋이 표시되며 한 자리 값의 경우 앞에 0이 표시됩니다.
zzz UTC에서 시간 및 분 오프셋입니다.

예제로 다음과 같이 만들어 보겠습니다.

var now = DateTime.Now;

Console.WriteLine(now.ToString("yy/M/d"));
Console.WriteLine(now.ToString("yyyy/MM/dd"));
Console.WriteLine(now.ToString("yy-MM-dd"));
Console.WriteLine(now.ToString("yy-MMM-dd ddd"));
Console.WriteLine(now.ToString("yyyy-M-d dddd"));
Console.WriteLine(now.ToString("yyyy MMMM dd"));
Console.WriteLine(now.ToString("h:mm:ss tt zzz"));
Console.WriteLine(now.ToString("HH:m:s tt zzz"));
Console.WriteLine(now.ToString("hh:mm:ss t z"));
Console.WriteLine(now.ToString("HH:mm:ss tt zz"));

출력은 다음과 같습니다.

24-3-18
2024-03-18
24-03-18
24-3-18 월
2024-3-18 월요일
2024 3월 18
6:55:02 오후 +09:00
18:55:2 오후 +09:00
06:55:02 오 +9
18:55:02 오후 +09

많이 쓰이는 예제는 다음과 같습니다

DateTime now = DateTime.Now;
Console.WriteLine(now.ToString("yyyy-MM-dd")); // "2024-03-18"
Console.WriteLine(now.ToString("MM/dd/yyyy")); // "03/18/2024"
Console.WriteLine(now.ToString("ddd, MMM d, yyyy")); // "Sat, Mar 18, 2024"
Console.WriteLine(now.ToString("hh:mm:ss")); // "03:24:16"
Console.WriteLine(now.ToString("H:mm:ss")); // "15:24:16"
Console.WriteLine(now.ToString("yyyy-MM-dd HH:mm:ss")); // "2024-03-18 15:24:16"

보다 자세한 사항은 다음 항목에서 확인 하실 수 있습니다.
https://learn.microsoft.com/ko-kr/dotnet/standard/base-types/custom-date-and-time-format-strings

결론

형식 지정자와 형식 문자열을 적절히 조합하여 DateTime 값을 원하는 형식으로 표시할 수 있습니다. 이를 통해 날짜와 시간 정보를 보기 좋게 표현할 수 있습니다.

Leave a Comment