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 값을 원하는 형식으로 표시할 수 있습니다. 이를 통해 날짜와 시간 정보를 보기 좋게 표현할 수 있습니다.