C#/형변환

[C#/.Net][String To DateTime] 문자형을 Datetime형으로 변경하기

Fly_Mir 2015. 11. 13. 14:02
Mir의 운영환경
본체Intel Stick PC (STK2M3W64CC)
O SWindows10 Home
ApplicationVisualStudio2010
.NetFramework Ver 4.0

날짜와 시간의 형식에 맞춘 String을 DateTime으로 변경해보자.

String을 DateTime으로 변경하는 방법은 여러가지 있습니다. 보통 아래방법들이 많이 사용됩니다.


1. Convert.ToDateTime("날짜") - 보통 Type을 변경할때 많이 쓰이는 Convert 함수입니다.

2. DateTime.Parse("날짜") - DateTime Class에서 제공하는 메소드로 Convert.ToDateTime과 별반 차이가 없습니다.

3. DateTime.TryParse("날짜",bool) - Parse()의 확장형으로 변경과 함께 정상적으로 변경이 되었는지 확인값도 리턴합니다.

4. DateTime.ParseExact("날짜","형식") - String에 들어가있는 날짜 형식을 사용자가 지정할수 있습니다.


4번의 ParseExact()메소드를 제외하고는(이건 형식을 지정할수 있으니...) 일정한 형식에 맞춰 넣어줘야지 DateTime형으로 정상적으로 변경됩니다.

아래 예제 소스로 하나하나 알아보도록 하겠습니다.

1. 날짜 입력시

1-1. 년,월,일 구분값은 [스페이스값],[/],[-] 으로만 구분가능하다. (섞여도 상관없습니다.)

        public void ToDateTimeTest1()
        {
            DateTime dti01 = Convert.ToDateTime("2015 11 13");      //변환 가능 (2015년 11월 13일 오후 12:00:00)
            DateTime dti02 = Convert.ToDateTime("2015-11-13");      //변환 가능 (2015년 11월 13일 오후 12:00:00)
            DateTime dti03 = Convert.ToDateTime("2015/11/13");      //변환 가능 (2015년 11월 13일 오후 12:00:00)
            DateTime dti04 = Convert.ToDateTime("2015-11/13");      //변환 가능 (2015년 11월 13일 오후 12:00:00)
            DateTime dti05 = Convert.ToDateTime("2015/11 13");      //변환 가능 (2015년 11월 13일 오후 12:00:00)
            DateTime dti06 = Convert.ToDateTime("20151113");        //에러 (구분값 없음)
            DateTime dti07 = Convert.ToDateTime("2015_11_13");      //에러 (구분값 에러)
            DateTime dti08 = Convert.ToDateTime("2015:11:13");      //에러 (구분값 에러 :는 시간에서 사용가능)
        }

1-2. 최소한 []과 []을 입력해주어야 한다. (년도는 미입력시 현재 년도로 자동입력됩니다.)

        public void ToDateTimeTest2()
        {
            DateTime dti09 = Convert.ToDateTime("11 13");       //변환 가능 (2015년 11월 13일 오후 12:00:00)
            DateTime dti10 = Convert.ToDateTime("15 11 13");    //변환 가능 (2015년 11월 13일 오후 12:00:00)
            DateTime dti11 = Convert.ToDateTime("30");          //에러
            DateTime dti12 = Convert.ToDateTime("30 15");       //에러 (30월이 없으므로 에러)
        }

1-3. 영어나 한글등 언어로 날짜를 입력시 해당 국가 표기방법으로만 입력해야한다. (섞이면 에러가 발생합니다.)

        public void ToDateTimeTest3()
        {
            DateTime dti13 = Convert.ToDateTime("2015년11월13일");         //변환 가능 (2015년 11월 13일 오후 12:00:00)
            DateTime dti14 = Convert.ToDateTime("November 13, 2015");      //변환 가능 (2015년 11월 13일 오후 12:00:00)
            DateTime dti15 = Convert.ToDateTime("Nov 13, 2015");           //변환 가능 (2015년 11월 13일 오후 12:00:00)
            DateTime dti16 = Convert.ToDateTime("2015-11월13일");          //에러 (한글표기에 구분값이 들어가서 에러)
            DateTime dti17 = Convert.ToDateTime("2015년11/13");            //에러 (한글표기에 구분값이 들어가서 에러)
            DateTime dti18 = Convert.ToDateTime("11월 13, 2015");          //에러 (영문표기에 한글이 들어가서 에러)
            DateTime dti19 = Convert.ToDateTime("2015Year 11Month 13Day"); //에러 (한국식 표기법을 영문으로 처리해서 에러)
        }

2. 시간 입력시

2-1. 시간은 [:]으로만 구분가능하다. ('스페이스', '-' , '/' 를 넣으면 날짜로 인식합니다. 날짜는 미입력시 오늘날짜로 입력됩니다.)

        public void ToDateTimeTest4()
        {
            DateTime dti20 = Convert.ToDateTime("10:15:22");        //변환 가능 (2015년 11월 13일 오전 10:15:22)
            DateTime dti21 = Convert.ToDateTime("101522");          //에러 (구분자 에러)
            DateTime dti22 = Convert.ToDateTime("10-15-22");        //에러 (2010년 15월 22일로 인식)
            DateTime dti23 = Convert.ToDateTime("10/15/22");        //에러 (2010년 15월 22일로 인식)
            DateTime dti24 = Convert.ToDateTime("10_15_22");        //에러 (구분자 에러)
        }

2-2. 최소한 []와 []은 입력해주어야 한다. (초는 미입력시 00초로 자동입력됩니다.)

        public void ToDateTimeTest5()
        {
            DateTime dti25 = Convert.ToDateTime("10:15");       //변환 가능 (2015년 11월 13일 오전 10:15:00)
            DateTime dti26 = Convert.ToDateTime("30");          //에러
            DateTime dti27 = Convert.ToDateTime("30:15");       //에러 (30시가 없으므로 에러)
        }

2-3. 영어나 한글등 언어로 날짜를 입력시 해당 국가 표기방법으로만 입력해야한다. (한국이외에는 xx : xx 표기법만 사용하는듯합니다.)

        public void ToDateTimeTest6()
        {
            DateTime dti28 = Convert.ToDateTime("10시 15분 22초");    //변환 가능 (2015년 11월 13일 오전 10:15:22)
            DateTime dti29 = Convert.ToDateTime("10:15 22초");        //변환 가능 (?? 이해할수는 없지면 변환 된다..)
            DateTime dti30 = Convert.ToDateTime("10시 15:22");        //에러 (표기방법 뒤섞임)
        }

2-4. 오전/오후(AM/PM) 구분이 없을경우 24시 기준으로 입력되며 오전/오후 구분이 있을경우 12시 기준으로 입력된다.

        public void ToDateTimeTest7()
        {
            DateTime dti31 = Convert.ToDateTime("PM 10시 15분 22초");     //변환 가능 (2015년 11월 13일 오후 10:15:22)
            DateTime dti32 = Convert.ToDateTime("오후 10:15:22");         //변환 가능 (2015년 11월 13일 오후 10:15:22)
            DateTime dti33 = Convert.ToDateTime("22:15:22");              //변환 가능 (2015년 11월 13일 오후 10:15:22)
            DateTime dti34 = Convert.ToDateTime("10:15:22 AM");           //변환 가능 (2015년 11월 13일 오전 10:15:22)
            DateTime dti35 = Convert.ToDateTime("22:15:22 AM");           //에러 (오전/오후 구분자가 있을경우 12시간 기준)
        }

1번과2번의 날짜/시간 입력방식만 지키면 날짜와 시간 모두 입력시 표기방법이 뒤섞여도 상관없습니다.

(날짜는 영문, 시간은 한글로 입력해도 상관없습니다.)


예제는 모두 Convert.ToDateTime() 메소드만 사용하였지만 DateTime.Parse()메소드도 모두 똑같이 적용됩니다.