2011-01-18 4 views
3

나는 구멍에 갇히고 나 자신의 삶은 내 자신을 파헤 치지 못한다.하루 중 시간이 있으십니까?

이것은 매우 심미적 인 질문이지만 내 코드에서 묻는 것을 얻고 싶습니다. 나는 LINQ 쿼리뿐만 아니라 textBox에 보내는 DateTime 변수에 시간을 나타내는 문자열을 파싱하려고합니다.

"yyyy-MM-dd hh : mm : ss"형식으로 내 시간을 나타내려고합니다. 선택 쿼리에서 가져온 것이지만 곧 사용자가 가지고있는 내용을 구문 분석하려고합니다. 그것은 "2011 년 1 월 13 일 00:00:00"형식이더라도 나를 "2013 년 1 월 13 일 12:00:00 AM", DateTime 텍스트 상자에 작성된.

나는이 작품을 만들기 위해 모든 노력을 기울 였지만, 해결책이 있어야한다고 느낀다. 너희들이 그것을 찾도록 도와 줄 수 있니? IFormatProvider는 무엇을 사용하고 있습니까?

이 내가 뭘하려 : 그것의

//textBox1.Text = "2011-01-13 00:00:00"; 
DateTime = TimeFrom;  
TimeFrom = DateTime.ParseExact(textBox1.Text, "yyyy-MM-dd hh:mm:ss", null); 
TimeFrom = DateTime.ParseExact(textBox1.Text, CultureInfo.CurrentCulture.DateTimeFormat.GetAllDateTimePatterns(), new CultureInfo("sv-SE"), DateTimeStyles.None); 
TimeFrom = DateTime.ParseExact(textBox1.Text, CultureInfo.CurrentCulture.DateTimeFormat.GetAllDateTimePatterns(), new CultureInfo("sv-SE"),System.Globalization.DateTimeStyles.AssumeUniversal); 
TimeFrom = DateTime.ParseExact("2008-10-01 16:44:12.000", "yyyy-MM-dd HH:mm:ss.fff", CultureInfo.CreateSpecificCulture("en-US")); 
textBox1.Text = TimeFrom.ToString(); 

그러나 아무도 나에게 내가 그렇게 갈망 서식을 제공하지 않습니다.



UPDATE : 어떻게 든 현재 문화는 내가 "에서"SV-SE "에서 textBox1.Text 값을 구문 분석하고 싶은 시점으로 내 날짜 시간 변수를 선언 시간 변경있어 나타납니다
ko-EN "이되었습니다. 그래서 저는 제 시간을 형식화하는 방식을 바꾸기로 결심했습니다. 그것은 내 코드에서하고있는 일이 아닙니다. 왜 어떤 아이디어?

왜 내 (IFormatProvider) new CultureInfo("sv-SE",true)을 무시하기로 결정했는지는 아직 알지 못했습니다.

의견이 있으면 알려 주시기 바랍니다.

+1

그것은 파서가 아닌 잘못된 형식을 사용하는 'ToString'입니다. 'DataTime' 구조체는 포맷팅에 대해 알고 있습니다. 그것은 단지 시간을 절약합니다. – CodesInChaos

+0

나는 다른 것을 구걸한다. 처음으로 DateTime을 UI에 쓰면 올바른 형식이됩니다. 그러나 해당 문자열을 다시 파싱 한 후 DateTime으로 변경하면 디버그에 따라 DateTime 변수에서 서식이 변경됩니다. –

+0

디버거에서 보여주는 것을 신뢰할 수 없습니다. 단지 ToString()을 호출하는 것입니다. ToString()은 DateTime 객체가 실제로 무엇인지 나타내는 하나의 표현입니다. – Greg

답변

3

구문 분석은 문자열을 가져 와서 형식을 사용하여 강력한 형식의 DateTime 개체로 변환하는 것을 의미합니다.

강력한 형식의 DateTime 개체를 문자열로 변환하려면 형식을 사용하여 ToString을 호출합니다.

TimeFrom.ToString("yyyy-MM-dd hh:mm:ss"); 

편집 : 당신이 물건을 시작하기 전에 아마 당신은 단지 Thread.CurrentThread.CurrentCulture = new CultureInfo("sv-SE")를 설정해야합니다. 이것은 ASP.NET 응용 프로그램입니까?

+0

나는 그것이 파싱이 무엇인지 알고 있습니다. 그래서 그것을 사용하고 있습니다. 필자는 DateTime을 지정된 형식으로 "캐스팅"하여 로그에 쓸 때마다 또는 UI를 둘러 볼 수있는 경우 UI를 사용하고 싶지 않습니다. –

+0

그럼 완전히 다른 질문입니다 :) 기본적으로 ToString()을 호출하면 미리 정의 된 형식으로 정확히이 작업을 수행하고 있습니다. 기본 ToString() 형식을 재정의하는 방법 : http://www.hanselman.com/blog/EnableEvilOverridingSystemDateTimesDefaultToString.aspx – Greg

+0

아, 재미 있습니다. 하지만 형식을 올바른 방식으로 시작하는 것이 더 쉬울까요? 구문 분석에서 나는 의미한다. 나는 그것이 가능할 것이라고 추측하고있다. 내 마음 속에는 어리석은 것이있을 것이다. –

0

InvariantCulture을 사용해 보셨습니까? 특정 형식으로 문자열을 인쇄하려면

+0

나는 가지고 있고, 불행하게도 도움이되지 않았다. TimeFrom = DateTime.ParseExact (textBox1.Text, CultureInfo.CurrentCulture.DateTimeFormat.GetAllDateTimePatterns(), CultureInfo.InvariantCulture, DateTimeStyles.None); –

1

format strings를 살펴 당신은 당신이 String로 변환하는 경우에만 DateTime를 포맷해야

TimeFrom.ToString("yyyy-MM-dd hh:mm:ss"); 

을 시도했습니다.

4
textBox1.Text = TimeFrom.ToString("yyyy-MM-dd hh:mm:ss"); 

이나 뭐 같은 : 정확히 필요에 따라

textBox1.Text = TimeFrom.ToString(new CultureInfo("sv-SE")); 

.

+0

좋은 점은, 아마도 그는 스레드의 문화를 전환해야 할 수도 있습니다. – Greg

+0

실제로 그렉. :) 당신에게 명성. 그러나 나는 내 생각이나 생각을 할 때마다 문화를 바꿔야합니까? –

+1

정말 응용 프로그램의 아키텍처에 따라 다릅니다. "sv-SE"를 항상 다루는 경우, 애플리케이션이 시작될 때 또는 web.config에서 ASP.NET을 사용하는 경우 설정하십시오. – Greg

0

안녕 얘들 아. 나는 단지 내 문제를 일으킨 것에 공개적으로 공개하고 싶었다.

나는 보고서를 렌더링하여 보고서 뷰어에로드하면 CurrentCulture가 en-EN으로 변경되었습니다. 보고서 언어가 공백으로 설정되어 기본 언어가 en으로 간주됩니다.

이렇게하면 내 시간이 바뀌 었습니다. DateTime 변수는 서식 문화를 기억하지 않습니다. 따라서 DateTime을 문자열로 나타내는 모든 변경 사항에는 다음과 같은 문자열 서식이 포함되어야합니다. dateTimeVariable.toString("yyyy-MM-dd hh:mm:ss")

누군가가 유용하다고 생각합니다.

관련 문제