2017-04-05 2 views
2

이 아닌 날짜로 구성되는 경우 다음 날짜가 "2017-04-05 05:00:00 a.m"문자열 형식입니다. 그 이유를 말해 주시겠습니까,DateTime.TryParse 날짜가 am 대신에

var dateTime="2017-04-05 05:00:00 a.m"; 
DateTime value = DateTime.MinValue; 
DateTime.TryParse(dateTime, out value); 

을하지만 alwayws는 {1/1/0001 오전 12시 0분 0초} dt가 점점 오전 : 이제 다음 코드를 사용하여 날짜 형식으로 그 변환하려고? 그 문자열을 어떻게 날짜로 변환 할 수 있습니까?

+0

이 TryParse의 반환 값을 확인,이 이야기 할 수 너 실패했다. – BugFinder

+0

아무 것도 반환하지 않습니다. 1/1/0001 12:00:00 AM이 값 – Meena

+1

에'TryParseExact'를 사용해 보았습니까? –

답변

2

가지고있는 문자열이 파싱되지 않아 기본값을 얻고 있습니다. 이유 중 하나는 날짜 문자열에있는 a.m입니다. 현재 thread Culture 설정에도 따라 다릅니다. TryParseExact을 사용하여 DateTime 문자열에있는 형식을 CulureInfo과 함께 사용할 수도 있습니다. 나는 위의 예에서 'a.m'와 함께했던 것처럼 당신이 a.m 대신이시의이

DateTime.TryParseExact(dateTime, "yyyy-MM-dd hh:mm:ss 'a.m'", CultureInfo.InvariantCulture,DateTimeStyles.None, out value); 

참고 탈출합니다.

p.m과 그 이상의 작업을 수행 할 수는 있습니다. 점을 빈 문자열로 대체하여 a.mam으로, p.mpm으로 변경하여 Custom Date and Time Format Stringstt을 am/pm으로 사용할 수 있습니다. am 또는 pm 사이에 하나의 점만 있다고 가정합니다.

string dateTime = "2017-04-05 05:00:00 a.m"; 
dateTime = dateTime.Replace(".", ""); 
DateTime value = DateTime.MinValue; 
DateTime.TryParseExact(dateTime, "yyyy-MM-dd hh:mm:ss tt", CultureInfo.InvariantCulture,DateTimeStyles.None, out value); 

, 관련 객체와 함께이 속성에서 반환되는 Thread.CurrentCulture

CultureInfo를 객체, 의 영향에 대해 자세히 알아보기 날짜, 시간, 숫자, 통화 값에 대한 기본 형식을 결정 , 텍스트의 정렬 순서, 대소 문자 변환 및 문자열 비교. culture 이름 및 식별자, 불변, 중립 및 특정 문화권 간의 차이점 및 culture 정보가 스레드 및 응용 프로그램 도메인에 미치는 영향에 대해 CultureInfo 클래스에서 을 참조하십시오. 스레드의 기본 문화권이 결정되는 방법과 사용자가 컴퓨터에 대한 문화권 정보를 설정하는 방법을 배우려면 CultureInfo.CurrentCulture 속성을 참조하십시오.

+2

실제로'p.m' 인 경우 어떻게됩니까? –

+0

심지어 나는 같은 의심을 품었다 – Meena

+0

@ DanielA.White, 우리는 a.m와 p.m을 오전, 오후로 바꿀 수 있고, 대답에서 언급했다. – Adil

0

이 문제의 원인입니다. a.mp.m을 처리한다고 가정하면 DateTime 값을 구문 분석하기 전에 .자를 제거하십시오.

var stringToParse = "2017-04-05 05:00:00 a.m"; 

DateTime parsedValue; 
DateTime.TryParse(stringToParse.Replace(".", string.Empty), out parsedValue); 

. 문자가 다른 이유로, 문자열의 다른 곳에서 사용하는 경우이 작동하지 않습니다. 예를 들어, 소수 자릿수 초. 이 경우 대신 Joe's answer을 사용하는 것이 좋습니다.

+0

이것은 문제가되는 것입니다 ... –

+0

@ DanielA.White Daniel, 많은 다른 답변에 대해 비슷한 의견을 보았습니다. _why_에서 확장 할 수 있습니까? 더 도움이 될 것입니다. –

+0

그런 식으로 문자열을 대체하지 말아야합니다. 너무 많은 것으로 가정합니다. –

10
당신은 사용자 정의 AM/PM 지정자와 사용자 정의 DateTimeFormatInfo을 만드는 시도 할 수

:이 또한 오후 시간 작동

var formatInfo = (DateTimeFormatInfo) CultureInfo.InvariantCulture.DateTimeFormat.Clone(); 
formatInfo.AMDesignator = "a.m"; 
formatInfo.PMDesignator = "p.m"; 

var value = DateTime.Parse("2017-04-05 05:00:00 a.m", formatInfo); 

:

var value = DateTime.Parse("2017-04-05 03:00:00 p.m", formatInfo); 
+0

그게 더 비슷해 ... –

+0

@Joe 잘하고있다, 가능하다면 나에게 대답을 설명 할 수있다 – Meena

+0

@Meena - 문자열을 파싱 할 때 DateTime.Parse와 관련 메소드는' DateTimeFormatInfo'를 구문 분석하는 데 사용됩니다. 기본적으로 이것은 Thread.CurrentCulture에서 가져 오며 영어 문화권에는 문자열 "AM"과 "PM"이 필요합니다. 문자열에는 "a.m"및 "p.m"이 포함되어 있습니다.이 매개 변수는 알려진 문화와 일치하지 않지만 사용자 정의 am/pm 지정자와 같이 사용자 정의 'DateTimeFormatInfo'를 만들 수 있습니다. – Joe