2013-12-17 3 views
3

DataTime을 12 시간 시계에서 시간으로 변환하는 중에 문제가 있습니다. 다음 코드는 24 시간 시계에서 잘 작동합니다.입력 문자열이 DateTime을 구문 분석하기위한 올바른 형식이 아닙니다.

(new DisplayReminder(_name, _displayText, _snoozTime, TimeSpan.Parse(_startTime.ToShortTimeString(), CultureInfo.InvariantCulture))).Show(); 

TimeSpan.Parse(_startTime.ToShortTimeString() 입력 문자열이 올바른 형식으로, 여기에 내가 날짜 시간 값 _startDate 이 문제에 대한 어떤 제안이나 솔루션에서 시간 부분을 얻기 위해 노력하고하지 않는 것이 예외에 발생합니다.

+0

보십시오. – Patrick

답변

3

(나는 _startTime이 DateTime이라고 가정) 다시 시도하지만 시간 만 변경하면 문자열 변환이 발생하지 않아야합니다.

TimeSpan time = _stateTime.TimeOfDay; 

문자열 변환을 피할 것을 강력히 권장합니다. ss 그들은 본질적으로 실현하려는 부분의입니다.

개인적으로 나는 어쨌든 TimeSpan을 하루 중 시간대로 사용하는 것을 좋아하지 않지만 그게 바로 BCL입니다. 다양한 날짜/시간 개념을보다 명확하게 구분 한 Noda Time 라이브러리를 살펴볼 수도 있습니다.

+0

BCL은 무엇을 의미합니까? –

+0

@AnkushMadankar : 기본 클래스 라이브러리. 기본적으로 ".NET 라이브러리는 기본적으로 제공됩니다."(정확하지는 않지만 정확하지만 지금은 충분합니다). –

+0

지식이 풍부한 답장을 다시 고맙습니다. Noda Times의 라이브러리를 확인하고 다운로드하여 사용합니다. 그러나 정확히 의미가있는 그대로 사용할 수는 없습니다. 그러나이 솔루션은 잘 작동합니다. –

1

이 시도 : TimeSpan.ParseExact 받아들이으로

TimeSpan.ParseExact(
     _startTime.ToString("hh:mm:ss"), "hh:mm:ss", 
          System.Globalization.CultureInfo.InvariantCulture); 

는이 같은 형식으로 날짜를 포맷합니다, 그래서 모든 컴퓨터에서 실행됩니다 그것은 당신이 무엇을 분명하지 않다

0

24H이지만 "PM" "AM"부분 때문에 12H 시스템에서 부숴지면 잘 작동합니다. 그것을 제거하면 11:54:33 PM 및 23:54:33이 처리의 측면에서 매우 다른 안전 할 것이다

편집 이되어 있지 않을 가능성이 최선의 해결책이 될 수 있지만, 당신은 문자열의 마지막 인덱스를 잘라 경우 작동 :

int index = _StartTime.IndexOf("M"); 
    if (index >= 0) 
{ 
_StartTime = _StartTime.Substring(0, index-1); 
switch (_StartTime.IndexOf("P")) 
case : -1 
_StartTime = _StartTime.Substring(0,_StartTime.Length); 
break; 

default: 
string hours = _startTime.Substring(_StartTime.Length-8,2); 
int H = Convert.ToInt32(hours); 
H += 12; 
string result = _StartTime.Substring(0, _StartTime.Length-8)+ Convert.ToString(H)+_startTime.Substring(_StartTime.Length-6); 

_StartTime = result; 
break; 
} 

이이 SECOND 편집 한 후 같은 이전의 코드를 사용할 수 있습니다, 멀리 AM/PM을 던질 것이다 는 가장 끔찍한 솔루션입니다하지만 작동)

+0

자, 이제 문제가 생겼습니다. 해결책을 제안 할 수 있습니까? –

+0

@AnkushMadankar 내 대답은'AM/PM' timespans를 구문 분석 할 수 있습니다 – wudzik

+0

@AnkushMadankar 편집보기 – chouaib

1

그것은 아마도 때문에 내가한다고 가정 시간 범위에서 실제로 적용되지 않습니다 AM/PM 텍스트의의

startTime.TimeOfDay.ToString() 
+1

무엇? 당신은 이미 TimeOfDay로부터 timespan을 가지고 있는데 왜 string으로 변환 한 다음 다시 변환 할 것인가? – Patrick

관련 문제