본문 바로가기
팁 & 노하우/C#

C# 날짜 시간 변환 format 과 DateTime.ParseExact 만 알면 뭐든지 해결

by 대디동동 2023. 11. 6.
728x90

프로그램 개발에서 시간 관련한 내용은 꼭 들어가는데,

예전에 분명히 어떻게 처리했는데 기억이 나지 않습니다.

이번 게시물에서는 실무에서 자주 사용하는 C# 날짜, 시간 변환 방법에 대해서 설명하니

끝까지 읽고 Level Up~ 하시기 바랍니다.

 

날짜 시간 계산에 대한 게시물을 아래를 참고해 주세요.

2023.10.19 - [코딩강좌/C# (.Net)] - C# (asp.net) 날짜 차이, 시간 차이 구하기 - 초보 개발자 레벨 업~

 

C# (asp.net) 날짜 차이, 시간 차이 구하기 - 초보 개발자 레벨 업~

안녕하세요. 대디동동입니다. 일상생활에서 날짜를 많이 사용하듯 프로그램에서도 날짜 관련한 코딩이 참 많습니다. 이번 게시물에서는 프로그램 개발시에 많이 사용하는데 막상 어떻게 해야

daddydongdong.tistory.com


날짜 시간 변환 알아보기

1. format (포맷) 형식

날짜, 시간을 변환하려면 먼저 날짜 및 시간의 형식 format을 알아야 합니다.

2024년 5월 5일 어린이날을 날짜를 표현한다면

2024년 5월 5일, 2024.5.5, 2024-05-05, 2024/5/5, 2024/05/05, 5/5/2024 등

나라마다, 개인마다 원하는 형태가 많아서 체계적으로 표현하기 위해서는 정해진 format을 알아야 합니다.

 

아래의 표는 실무에서 가장 많이 사용하는 포맷을 우선 정리하였으니 꼭 기억하셔서 활용하시기 바랍니다.

특히, 날짜, 시간 포맷 형식에서는 대문자, 소문자를 정확하게 구분해서 입력해야 하는 것을 주의해야 합니다.

구분 포맷 형식 설명 결과
yy 연도의 뒤 2자리 표시 2023년 -> 23
yyyy 연도 4자리 모두 표시 2023년 -> 2023
M 0에서 12까지
앞 자리에 "0"을 생략
9월 -> 9
12월 -> 12
MM 00에서 12까지
앞 자리에 "0"을 포함하여 2자리로 고정
9월 -> 09
12월 -> 12
d 1에서 31까지
앞 자리에 "0"을 생략
3일 -> 3
15일 -> 15
dd 01에서 31까지
앞 자리에 "0"을 포함하여 2자리로 고정
3일 -> 03
15 -> 15
h 0에서 12까지
12시간제로 표시
앞 자리에 "0"을 생략
3시 -> 3
15시 -> 3
hh 0에서 12까지
12시간제로 표시
앞 자리에 "0"을 포함하여 2자리로 고정
3시 -> 03
15시 -> 03
H 0에서 23까지
24시간제 표시
앞 자리에 "0"을 생략
3시 -> 3
15시 -> 15
HH 00에서 23까지
24시간제 표시
앞 자리에 "0"을 포함하여 2자리로 고정
3시 -> 03
15시 -> 15
m 0에서 59까지
앞 자리에 "0"을 생략
5분 -> 5
25분 -> 25
mm 00에서 59까지
앞 자리에 "0"을 포함하여 2자리로 고정
5분 -> 05
25분 -> 25
s 0에서 59까지
앞 자리에 "0"을 생략
8초 -> 8
47초 -> 47
ss 00에서 59까지
앞 자리에 "0"을 포함하여 2자리로 고정
08초 -> 08
47초 -> 47
오전, 오후 (AM, PM) tt 오전, 오후 (AM, PM) 05시 -> 오전
17시 -> 오후
밀리초 f
ff
fff
ffff
fffff
ffffff
fffffff
1/10초
1/100초
1/1000초
1/10000초
1/100000초
1/1000000초
45.7451248초 -> 45.7
45.7451248초 -> 45.74
45.7451248초 -> 45.745
45.7451248초 -> 45.7451
45.7451248초 -> 45.74512
45.7451248초 -> 45.745124
45.7451248초 -> 45.7451248

추가로 더 많은 옵션이 있지만 자주 사용되지 않습니다.

2. 날짜, 시간 생성 및 포맷 변경

날짜 시간에 관련한 형식(포맷, format)을 알았다면, 이제 날짜를 만들고 원하는 형태로 변경하는 법을 알아야 합니다.

 

C#에서 날짜를 만들 때 사용하는 Class는 DateTime입니다.

생성자 옵션을 어떤 것을 사용하는지에 따라 다르지만,

연, 월, 일 또는 연, 월, 일, 시, 분, 초 형태의 두 가지가 실무에서 가장 많이 사용됩니다.

기본 날짜 생성 예제

//DateTime(연, 월, 일) or DateTime(연, 월, 일, 시, 분, 초)

//1. 연, 월, 일 넣어 날짜를 생성할 경우
var newDate = new DateTime(2023, 11, 6);

//결과 (00시 00분 00초로 설정)
2023-11-06 00:00:00


//2. 연, 월, 일, 시, 분, 초로 날짜와 시간을 생성할 경우
//   시간은 24시간제 기준으로 입력
var newDateTime = new DateTime(2023, 11, 6, 15, 30, 30);

//결과
2023-11-06 15:30:00

 

포맷 형태로 날짜 변경 예제

var viewDateTime = string.Empty;
var nowDate = new DateTime(2023, 6, 10, 14, 5, 10);

//1. 2023-06-10
viewDateTime = newDateTime.ToString("yyyy-MM-dd");

//2. 2023.06.10
viewDateTime = newDateTime.ToString("yyyy.MM.dd");

//3. 2023/06/10 - 특수문자 escape 처리
viewDateTime = newDateTime.ToString("yyyy\\/MM\\/dd");

//4. 2023-06-10 14:05:10 - 24시간제
viewDateTime = newDateTime.ToString("yyyy-MM-dd HH:mm:ss");

//5. 20230610140510 - 24시간제
viewDateTime = newDateTime.ToString("yyyyMMddHHmmss");

//6. 2023-6-10 2:5:10 오후- 12시간제
viewDateTime = newDateTime.ToString("yyyy-M-d h:m:ss tt");

실제 실무에서 가장 선호되는 형식은 4번째  yyyy-MM-dd HH:mm:ss 또는 5번째 yyyyMMddHHmmss 처럼

고정된 글자수를 가진 것을 가장 많이 사용합니다.

 

3. 문자열 시간 변환 실무 예제

게시물 등록시간, 로그인 시간 등 자료를 저장하는 기능이 있는 경우 DB에 처리 시간을 기록하여 사용합니다.

시간을 Datetime 형태로 저장하는 경우도 있고 변환 및 API 제공을 위해 고정된 문자열로 변경 후 저장하기도 합니다.

 

아래 예제에서는 DB사용 공간 절약 및 변환 등에 유리한  yyyyMMddHHmmss 형식 변경 방법과,

오전, 오후가 들어있는 값을 변환하는 실전 예제이니 참고하시기 바랍니다.

//1. yyyyMMddHHmmss 형태의 문자열 -> 날짜,시간 (DateTime 변환)
var writeDateString = "20230610140510";

DateTime writeDate = DateTime.ParseExact(writeDateString, "yyyyMMddHHmmss", null);

var changeWriteDate = writeDate.ToString("yyyy-MM-dd HH:mm:ss");

//결과
2023-06-10 14:05:10


//2. MSSQL DateTime 저장 형태 변환 (오전, 오후)
var writeDateStringKor = "2023-06-10 오후 2:05:10";

DateTime writeDateKor = DateTime.ParseExact(writeDateStringKor, "yyyy-MM-dd tt h:mm:ss", null);

var changeWriteDateKor = writeDateKor.ToString("yyyy-MM-dd HH:mm:ss");

//결과
2023-06-10 14:05:10

이번 시간에는 DateTime 변경에 대한 방법을 알아보았습니다.

날짜, 시간의 format 형식을 알아야 올바른 변환이 가능한 것을 보았습니다.

또한, DateTime.ParseExact를 통해서 변환하면 Year, Month, Day, AddDays, AddHours 등 많은 기능을

사용할 수 있으니 꼭 기억하셔서 활용하시기 바랍니다.

 

참고로 C#에는 날짜, 시간 변환에 사용하는 Convert.ToDateTime도 있는데

다른 게시물에서 설명하도록 하겠습니다.

반응형