프로그램 개발에서 시간 관련한 내용은 꼭 들어가는데,
예전에 분명히 어떻게 처리했는데 기억이 나지 않습니다.
이번 게시물에서는 실무에서 자주 사용하는 C# 날짜, 시간 변환 방법에 대해서 설명하니
끝까지 읽고 Level Up~ 하시기 바랍니다.
날짜 시간 계산에 대한 게시물을 아래를 참고해 주세요.
2023.10.19 - [코딩강좌/C# (.Net)] - C# (asp.net) 날짜 차이, 시간 차이 구하기 - 초보 개발자 레벨 업~
날짜 시간 변환 알아보기
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도 있는데
다른 게시물에서 설명하도록 하겠습니다.
'팁 & 노하우 > C#' 카테고리의 다른 글
Vue js 3, v-html button click event 처리 (버튼 클릭 이벤트) (0) | 2024.02.26 |
---|---|
영화진흥위원회 오픈API 활용 C#, .net 8.0, MVC, Vue.js (0) | 2024.02.20 |
c# 반복문 foreach, for 에서 인덱스 번호 가져오기 (0) | 2023.11.02 |
C# (asp.net) 날짜 차이, 시간 차이 구하기 - 초보 개발자 레벨 업~ (1) | 2023.10.19 |
C# 차집합, 교집합, 합집합을 활용한 프로그램 예제 (0) | 2023.09.29 |