[C#] 문자열을 DateTime으로 변환

어떻게 같은 문자열을 변환 할 2009-05-08 14:40:52,531DateTime?



답변

24 시간 기반 시간을 처리하고 초를 분리하는 쉼표가 있으므로 사용자 지정 형식을 지정하는 것이 좋습니다.

DateTime myDate = DateTime.ParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff",
                                       System.Globalization.CultureInfo.InvariantCulture);


답변

기본적으로 두 가지 옵션이 있습니다. DateTime.Parse()그리고 DateTime.ParseExact().

첫 번째는 구문 측면에서 매우 관대하며 다양한 형식으로 날짜를 구문 분석합니다. 다른 형식으로 제공 될 수있는 사용자 입력에 좋습니다.

ParseExact를 사용하면 구문 분석에 사용할 날짜 문자열의 정확한 형식을 지정할 수 있습니다. 문자열이 항상 같은 형식 인 경우 이것을 사용하는 것이 좋습니다. 이렇게하면 예상 데이터와의 편차를 쉽게 감지 할 수 있습니다.

다음과 같이 사용자 입력을 구문 분석 할 수 있습니다.

DateTime enteredDate = DateTime.Parse(enteredString);

문자열에 특정 형식이있는 경우 다른 방법을 사용해야합니다.

DateTime loadedDate = DateTime.ParseExact(loadedString, "d", null);

"d"간단한 날짜 패턴 (참조 약자 대한 추가 정보를 원하시면 MSDN을 )와 null현재의 문화가 문자열을 구문 분석에 사용되도록 지정합니다.


답변

이 시도

DateTime myDate = DateTime.Parse(dateString);

더 좋은 방법은 다음과 같습니다.

DateTime myDate;
if (!DateTime.TryParse(dateString, out myDate))
{
    // handle parse failure
}


답변

사용 DateTime.Parse(string):

DateTime dateTime = DateTime.Parse(dateTimeStr);


답변

아무도 확장 방법을 구현하지 않은 것 같습니다. 의 도움으로 CMS의 대답 @ :

작동 및 개선 된 전체 소스 예제는 다음과 같습니다. Gist Link

namespace ExtensionMethods {
    using System;
    using System.Globalization;

    public static class DateTimeExtensions {
        public static DateTime ToDateTime(this string s,
                  string format = "ddMMyyyy", string cultureString = "tr-TR") {
            try {
                var r = DateTime.ParseExact(
                    s: s,
                    format: format,
                    provider: CultureInfo.GetCultureInfo(cultureString));
                return r;
            } catch (FormatException) {
                throw;
            } catch (CultureNotFoundException) {
                throw; // Given Culture is not supported culture
            }
        }

        public static DateTime ToDateTime(this string s,
                    string format, CultureInfo culture) {
            try {
                var r = DateTime.ParseExact(s: s, format: format,
                                        provider: culture);
                return r;
            } catch (FormatException) {
                throw;
            } catch (CultureNotFoundException) {
                throw; // Given Culture is not supported culture
            }

        }

    }
}

namespace SO {
    using ExtensionMethods;
    using System;
    using System.Globalization;

    class Program {
        static void Main(string[] args) {
            var mydate = "29021996";
            var date = mydate.ToDateTime(format: "ddMMyyyy"); // {29.02.1996 00:00:00}

            mydate = "2016 3";
            date = mydate.ToDateTime("yyyy M"); // {01.03.2016 00:00:00}

            mydate = "2016 12";
            date = mydate.ToDateTime("yyyy d"); // {12.01.2016 00:00:00}

            mydate = "2016/31/05 13:33";
            date = mydate.ToDateTime("yyyy/d/M HH:mm"); // {31.05.2016 13:33:00}

            mydate = "2016/31 Ocak";
            date = mydate.ToDateTime("yyyy/d MMMM"); // {31.01.2016 00:00:00}

            mydate = "2016/31 January";
            date = mydate.ToDateTime("yyyy/d MMMM", cultureString: "en-US");
            // {31.01.2016 00:00:00}

            mydate = "11/شعبان/1437";
            date = mydate.ToDateTime(
                culture: CultureInfo.GetCultureInfo("ar-SA"),
                format: "dd/MMMM/yyyy");
         // Weird :) I supposed dd/yyyy/MMMM but that did not work !?$^&*

            System.Diagnostics.Debug.Assert(
               date.Equals(new DateTime(year: 2016, month: 5, day: 18)));
        }
    }
}


답변

나는 다양한 방법으로 시도했다. 나를 위해 일한 것은 이것이었다 :

Convert.ToDateTime(data, CultureInfo.InvariantCulture);

data 나를 위해이 시간 9/24/2017 9:31:34 오전


답변

아래에서 strDate가 ‘MM / dd / yyyy’형식의 날짜입니다.

var date = DateTime.Parse(strDate,new CultureInfo("en-US", true))