C#中的解析时间



如何仅在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,例如,如果用户在文本框

中将其输入为"12:45pm">

。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;  

由于MeetingTimeTimeSpan(在您的情况下这是正确的类型(,您无法将包含前meridiem或后meridiem指示符的字符串解析为TimeSpan

这些指示符适用于DateTime类型。TimeSpan是一个时间反转。当你试图说这样的话时,我会毫无意义12小时45分钟,中午后反转。没有道理,对吧?

var s = "12:45";
var MeetingTime = TimeSpan.Parse(s);

您应该防止在文本框中键入指示符,强制输入格式为hh:mm,或者您应该使用一些下拉列表来输入小时、分钟和秒值,并将它们组合在代码后面。

相关内容

  • 没有找到相关文章

最新更新