2

我的页面上有一个自定义控件,其中包含小时、分钟和上午/下午字段。我需要能够获取每个字符串 Hour + Minutes + AM/PM 并获得有效的 TimeSpan,以便我可以与 Date 结合使用。

我尝试了几种不同的方法,但得到了 Invalid 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);

除了考虑 Parse 的错误。如何从时间字符串和上午/下午获得有效的时间跨度?

谢谢

4

3 回答 3

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在这种情况下没有理由构建 a ,因为DateTime.Parse可以将带有时间的日期处理为单个DateTime.

于 2013-07-12T17:36:42.743 回答
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
于 2013-07-12T17:41:33.250 回答
1

TimeSpan对象没有上午/下午的概念。您必须使用 aDateTime代替:

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

延伸阅读

于 2013-07-12T17:39:54.547 回答