如何仅在C#中解析时间?例如,如果用户在文本框中输入"12:45pm"?如何将变量存储为DateTime或TimeSpan?
这是我的代码:
public partial class CreateMeetingWindow : Window {
public string MeetingTYpe { get; set; }
public string MeetingCode {get; set;}
public DateTime MeetingDate { get; set; }
public TimeSpan MeetingTime { get; set; }
public bool Cancelled {get; set;}
public CreateMeetingWindow(Window parent) {
InitializeComponent();
}
private void btnOK_Click(object sender, RoutedEventArgs e) {
MeetingCode = cbxMeetingType.SelectedValue.ToString ();
MeetingCode = txtMeetingCode.Text;
MeetingDate = DateTime.Parse(datePicker.SelectedDate.ToString ());
Cancelled = false;
this.Hide ();
}
private void btnCancel_Click(object sender, RoutedEventArgs e) {
Cancelled = true;
this.Hide();
}
}
因此,我关心的是变量MeetingTime,例如,如果用户在文本框
。NET目前没有内置的时间数据类型。您的选择是:
使用
TimeSpan
,尽管它主要是为运行时间值设计的,因此它不支持AM/PM指示符。使用带有任意日期的
DateTime
,注意不要在任何地方使用日期部分。使用第三方库Noda Time中的
LocalTime
类型。LocalTime
是一天中的真实时间类型。
此外,我不确定你为什么有:
MeetingDate = DateTime.Parse(datePicker.SelectedDate.ToString());
而不仅仅是:
MeetingDate = datePicker.SelectedDate;
如果你想将两者结合起来,可以考虑:
DateTime meetingDate = datePicker.SelectedDate;
DateTime meetingTime = DateTime.Parse(txtMeetingTime);
DateTime meetingDateTime = meetingDate.Date + meetingTime.TimeOfDay;
由于MeetingTime
是TimeSpan
(在您的情况下这是正确的类型(,您无法将包含前meridiem或后meridiem指示符的字符串解析为TimeSpan
。
这些指示符适用于DateTime
类型。TimeSpan
是一个时间反转。当你试图说这样的话时,我会毫无意义12小时45分钟,中午后反转。没有道理,对吧?
var s = "12:45";
var MeetingTime = TimeSpan.Parse(s);
您应该防止在文本框中键入指示符,强制输入格式为hh:mm
,或者您应该使用一些下拉列表来输入小时、分钟和秒值,并将它们组合在代码后面。