문자열이 생기고 해당 문자열을 날짜로 구문 분석하고 DataTable에 저장하려고합니다.문자열을 구문 분석 할 때
문자열 형식 1 "2014/23/10" 2 "2014-23-10"
{
string st="2014/23/10";
string st="2014-23-10";
}
에있을 그리고 함께 시간을 첨부 할 수 있습니다.
가능한 모든 아이디어?
문자열이 생기고 해당 문자열을 날짜로 구문 분석하고 DataTable에 저장하려고합니다.문자열을 구문 분석 할 때
문자열 형식 1 "2014/23/10" 2 "2014-23-10"
{
string st="2014/23/10";
string st="2014-23-10";
}
에있을 그리고 함께 시간을 첨부 할 수 있습니다.
가능한 모든 아이디어?
유연해야하는 경우 DateTime
을 DateTime.TryParseExact();
또는 DateTime.Parse
으로 변환하십시오. 그런 다음 원하는 형식으로 다시 포맷 할 수 있습니다!
참조 : http://msdn.microsoft.com/en-us/library/ms131044(v=vs.110).aspx
이 시도 :
DateTime.Parse(st);
위의 라인은 당신을위한 작품, 다음 아래 cultrureInfo을 추가 할이 경우 시도
DateTime.ParseExact(st,"yyyy/dd/MM", CultureInfo.InvariantCulture);
코드를 실행할 때 "String이 유효한 DateTime으로 인식되지 않았습니다"라는 FormatException이 발생합니다. 이것은 CultureInfo에 의존적 일 수 있습니다. 따라서 컴퓨터에서 작동하는 경우에도 해당 문화권의 표준 날짜 형식에 따라 다른 사람에게 제공되지 않을 수 있습니다. –
그것은 cultrureInfo 문제이므로 다음을 시도 할 수 있습니다. DateTime.ParseExact (st, "yyyy/dd/MM", CultureInfo.InvariantCulture); –
DateTime.Parse(st, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
요구 사항에 따라 DateTimeStyles를 설정하십시오.
둘 다 표준 날짜 및 시간 형식이 아니므로 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
{
//
}
두 가지 옵션을 사용했는데 입력 형식에 따라 사용하는 옵션이 있습니다. OP가 * 두 * 형식 모두에서 작동하는 * one 옵션을 찾고 있다고 생각합니다. 예를 들어 나의 대답을보십시오. –
@JonSkeet 예 존 (Jon), 귀하가이 댓글을 쓰는 것과 동시에 내 답변을 편집하고있었습니다. 감사. –
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
을 사용하십시오 (실패시 예외가 발생 함).
아니요, 구문 분석 대신 TryParseExact를 사용하십시오. – wudzik
시도해보십시오. DateTime.Parse (st); –