2013-12-17 122 views
3

我在將時間轉換爲12小時制時鐘時遇到問題。以下代碼在24小時時鐘機器上正常工作。輸入字符串格式不正確,無法解析DateTime

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

TimeSpan.Parse(_startTime.ToShortTimeString()拋出exeception輸入字符串中的格式不正確,我在這裏試圖獲得一部分時間從DateTime值_startDate 在這個問題上有任何建議或解決方案。

+0

這可能是因爲AM/PM的文字,這是不是真的適用於一個時間跨度,我想的。 – Patrick

回答

3

目前還不清楚是什麼你「重新嘗試做,但剛開一天的時間應不涉及字符串轉換:

TimeSpan time = _stateTime.TimeOfDay; 

我強烈建議你避免字符串轉換unle它們本質上是你試圖實現的一部分。

就我個人而言,我不喜歡使用TimeSpan作爲一天的時間,但這是您的BCL。你可能也想看看我的Noda Time庫有更清晰的各種日期/時間概念的分離。

+0

BCL的意思是什麼? –

+0

@AnkushMadankar:基礎類庫。基本上「開箱即用的.NET庫」(不*嚴格*精確,但現在足夠接近)。 –

+0

再次感謝知識淵博的回覆,我查看了Noda Times圖書館,下載並使用它,但我無法正確使用它。但這個解決方案工作正常。 –

1

試試這個:

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

將您的日期格式相同的格式爲TimeSpan.ParseExact接受,所以它會在任何機器上運行(我假設_startTime是DateTime

0

我很確定它在24H時能正常工作,但在12H系統中壓碎,因爲「PM」「AM」部分!擺脫它,你將會很安全 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; 
} 

這將引發AM/PM的時候,你可以在此 第二個編輯後,使用相同的前面的代碼 這是最可怕的解決方案,但它的工作原理;)

+0

好吧,我現在有問題了,你可以建議解決方案嗎? –

+0

@AnkushMadankar我的答案可以讓你解析'AM/PM' timespans – wudzik

+0

@AnkushMadankar參見編輯 – chouaib

1

嘗試

startTime.TimeOfDay.ToString() 
+1

什麼?您已經有TimeOfDay的時間範圍,爲什麼將它轉換爲字符串,然後將其轉換回來,僅將其再次轉換爲字符串? – Patrick