2014-04-08 4 views
0

문자열이 생기고 해당 문자열을 날짜로 구문 분석하고 DataTable에 저장하려고합니다.문자열을 구문 분석 할 때

문자열 형식 1 "2014/23/10" 2 "2014-23-10"

{ 
string st="2014/23/10"; 
string st="2014-23-10"; 
} 

에있을 그리고 함께 시간을 첨부 할 수 있습니다.

가능한 모든 아이디어?

답변

0

유연해야하는 경우 DateTimeDateTime.TryParseExact(); 또는 DateTime.Parse으로 변환하십시오. 그런 다음 원하는 형식으로 다시 포맷 할 수 있습니다!

참조 : http://msdn.microsoft.com/en-us/library/ms131044(v=vs.110).aspx

+0

아니요, 구문 분석 대신 TryParseExact를 사용하십시오. – wudzik

+0

시도해보십시오. DateTime.Parse (st); –

0

이 시도 :

DateTime.Parse(st); 

위의 라인은 당신을위한 작품, 다음 아래 cultrureInfo을 추가 할이 경우 시도

DateTime.ParseExact(st,"yyyy/dd/MM", CultureInfo.InvariantCulture); 
+0

코드를 실행할 때 "String이 유효한 DateTime으로 인식되지 않았습니다"라는 FormatException이 발생합니다. 이것은 CultureInfo에 의존적 일 수 있습니다. 따라서 컴퓨터에서 작동하는 경우에도 해당 문화권의 표준 날짜 형식에 따라 다른 사람에게 제공되지 않을 수 있습니다. –

+0

그것은 cultrureInfo 문제이므로 다음을 시도 할 수 있습니다. DateTime.ParseExact (st, "yyyy/dd/MM", CultureInfo.InvariantCulture); –

0

DateTime.Parse(st, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal); 

요구 사항에 따라 DateTimeStyles를 설정하십시오.

1

둘 다 표준 날짜 및 시간 형식이 아니므로 DateTime.ParseExact과 같은 방법을 사용할 수 있습니다.

string st = "2014/23/10"; 
string st1 = "2014-23-10"; 
var date = DateTime.ParseExact(st, 
        "yyyy/dd/MM", CultureInfo.InvariantCulture); 
var date1 = DateTime.ParseExact(st1, 
        "yyyy-dd-MM", CultureInfo.InvariantCulture); 

출력됩니다. 여기에 demonstration

10/23/2014 12:00:00 AM 
10/23/2014 12:00:00 AM 

.

물론 이러한 출력은 현재 문화권 스레드에 따라 다릅니다.

문자열 형식으로 DateTime의 서식을 지정하려는 경우 문자열 형식으로 사용할 수있는 DateTime.ToString(string) overload을 사용할 수 있습니다.

형식이 두 개 이상이므로 형식을 문자열 배열로 사용하는 DateTime.TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime) overload을 사용할 수 있습니다.

var formats = new []{"yyyy-MM-dd", "yyyy/MM/dd"}; 
DateTime dt; 
if(DateTime.TryParseExact(st, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt)) 
{ 
    // 
} 
else 
{ 
    // 
} 
+0

두 가지 옵션을 사용했는데 입력 형식에 따라 사용하는 옵션이 있습니다. OP가 * 두 * 형식 모두에서 작동하는 * one 옵션을 찾고 있다고 생각합니다. 예를 들어 나의 대답을보십시오. –

+0

@JonSkeet 예 존 (Jon), 귀하가이 댓글을 쓰는 것과 동시에 내 답변을 편집하고있었습니다. 감사. –

1

DateTime.ParseExact 또는 DateTime.TryParseExact 여기에 적합 - 모두가 당신이이 경우에 필요하다, 여러 형식 문자열을 받아 들일 것입니다. 입력이 사용자로부터 (그리고 잠재적으로 나눌 수하는 것이 "예상"인 경우

string[] formats = { "yyyy-MM-dd", "yyyy/MM/dd" }; 
DateTime date; 
if (DateTime.TryParseExact(input, formats, 
          CultureInfo.InvariantCulture, 
          DateTimeStyles.None, out date)) 
{ 
    // Add date to the DataTable 
} 
else 
{ 
    // Handle parse failure. If this really shouldn't happen, 
    // use DateTime.ParseExact instead 
} 

: (예 : 기본 일정으로) 어떤 문화권 별 설정이 결과에 영향을 미치지 있도록 고정 문화권을 지정해야합니다 , 시스템의 아무 곳에서나 오류를 나타내지 않고) TryParseExact을 사용해야합니다. 구문 분석 실패가 현재 작업을 중단해야하는 심각한 문제를 나타내는 경우 대신 ParseExact을 사용하십시오 (실패시 예외가 발생 함).

관련 문제