2013-07-12 63 views
2

我的頁面上有一個自定義控件,其中包含「小時」,「分鐘」和「上午/下午」字段。我需要能夠採取每個字符串小時+分鐘+上午/下午,並獲得一個有效的時間跨度,所以我可以結合一個日期。自定義字符串TimeSpan轉換

我試過了幾種不同的方法,但得到無效的TimeSpan錯誤。這是我的代碼

string date = DateDropDown.SelectedValue; 
string hour = HourDropDown.SelectedValue; 
string minute = MinuteDropDown.SelectedValue; 
string timeofDay = AMPMDropDown.SelectedValue; 

string timeStr = hour.PadLeft(2, '0') + ":" + minute + timeofDay; 

TimeSpan custTime = TimeSpan.Parse(timeStr); 
DateTime custDate = DateTime.Parse(date); 
DateTime callBackDT = custDate.Add(custTime); 

除了考慮錯誤與解析。如何從時間字符串和上午/下午獲得有效的時間範圍?

感謝

+0

最終的字符串將如何看起來像? – Habib

+0

請記住'TimeSpan'是爲了表示測量的持續時間。它可能比一天更長,或者可能是負面的。有趣的是'DateTime.TimeOfDay'使用'TimeSpan'類型,因爲這不是它的意思。但是,嘿,這只是關於.NET和'DateTime'的煩瑣的冰山一角。 –

回答

3

只是解析DateTime一次,在最後:

string date = DateDropDown.SelectedValue; 
string hour = HourDropDown.SelectedValue; 
string minute = MinuteDropDown.SelectedValue; 
string timeofDay = AMPMDropDown.SelectedValue; 

string dateStr = date + " " + hour.PadLeft(2, '0') + ":" + minute + " " + timeofDay; 

DateTime callBackDT = DateTime.Parse(dateStr); 

沒有理由建立在這種情況下TimeSpan,作爲DateTime.Parse可以處理時間日期作爲一個DateTime

+1

我清楚地試圖將其複雜化。感謝您解開我的想法! – Encryption

1

TimeSpan物件沒有am/pm的概念。你必須使用一個DateTime來代替:

string timeStr = hour.PadLeft(2, '0') + ":" + minute.PadLeft(2, '0') + " " + timeofDay; 
DateTime custDate = DateTime.ParseExact("HH:mm t", timeStr, null); 
TimeSpan custTime = custDate.TimeOfDay; 

進一步閱讀

2

如果你沒有使用TimeSpan,只是解析與整個字符串DateTime.Parse

var timeStr = string.Format("{0} {1}:{2} {3}", date, hour.PadLeft(2, '0'), minute, timeofDay); 
var callBackDT = DateTime.Parse(timeStr, CultureInfo.CreateSpecificCulture("en-US")); 
// Or whatever culture your string will be formatted with 
相關問題